vadimon1337
@vadimon1337

Как в pygame изменить цвет определнных слов в тексте?

5f08846ba63ee376176923.png

Есть текст с белым шрифтом. Необходимо изменить цвет определенных слов тексте.

Сам класс TextBox:
class TextBox(object):
    def __init__(self, x, y, w, h, text='', font=None, font_size=10, justify='left', border=1):
        self.rect = pg.Rect(x, y, w, h)
        self.color = c.WHITE
        self.text = text
        self.font_family = font
        self.font_size = font_size
        self.font = pg.font.Font(self.font_family, self.font_size)
        self.line_spacing = 2
        self.padding = (10, 20)
        self.justify = justify
        self.border = border
        self.text_surface = self.render_text(self.text)

    def render_text(self, text):
        final_lines = []

        requested_lines = text.splitlines()

        for requested_line in requested_lines:
            if self.font.size(requested_line)[0] > self.rect.width - self.padding[1]:
                words = requested_line.split()
                for word in words:
                    if self.font.size(word)[0] >= self.rect.width - self.padding[1]:
                        pass

                accumulated_line = ""

                for word in words:
                    test_line = accumulated_line + word + " "
                    if self.font.size(test_line)[0] < self.rect.width - self.padding[1]:
                        accumulated_line = test_line
                    else:
                        final_lines.append(accumulated_line)
                        accumulated_line = word + " "
                final_lines.append(accumulated_line)
            else:
                final_lines.append(requested_line)

        surface = pg.Surface(self.rect.size)
        surface.fill(c.BLACK)

        accumulated_height = 0
        for line in final_lines:
            if accumulated_height + self.font.size(line)[1] >= self.rect.height:
               pass

            if line != "":
                tempsurface = self.font.render(line, True, self.color)
                if self.justify == 'left':
                    surface.blit(
                        tempsurface, (0 + self.padding[1], accumulated_height + self.padding[0]))
                elif self.justify == 'center':
                    surface.blit(tempsurface, ((
                        self.rect.width - tempsurface.get_width()) / 2, accumulated_height + self.padding[0]))
                elif self.justify == 'right':
                    surface.blit(tempsurface, (self.rect.width -
                                               tempsurface.get_width() - self.padding[1], accumulated_height + self.padding[0]))

                else:
                    print('Invalid justification argument!')

            accumulated_height += self.font.size(line)[1]

        return surface

    def draw(self, surface):

        surface.blit(self.text_surface, self.rect)

        if self.border:
            pg.draw.rect(surface, c.WHITE, self.rect, self.border)

    def update(self):
        pass


Проблема заключается в том, что весь текст отображается одним цветом и я не совсем понимаю, каким образом можно изменить цвет определенного слова в тексте.
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы