Изменение цвета одной строки в QTextEdit

Я работаю над графическим интерфейсом, разработанным через PyQt и Qt4. В моем GUI у меня есть QTextEdit, в который записаны различные данные. Есть ли способ, которым я могу манипулировать цветом одного слова в QTextEdit?

Например

redText = "I want this text red"
self.myTextEdit.write(redText)
blackText = "And this text black"
self.myTextEdit.append(blackText)

Это возможно? Если так, как я мог сделать это?

С Уважением,

Судо!!

6 ответов

Вы должны предоставить расширенный текст для этого. Это можно сделать, создав <span> тег и настройка color свойство к значению RGB:

redText = "<span style=\" font-size:8pt; font-weight:600; color:#ff0000;\" >"
redText.append("I want this text red")
redText.append("</span>")
self.myTextEdit.write(redText)

blackText = "<span style=\" font-size:8pt; font-weight:600; color:#000000;\" >"
blackText.append("And this text black")
blackText.append("</span>")
self.myTextEdit.append(blackText)

После некоторого исследования других методов, которые люди использовали, я понял это и хотел поделиться. Я попробовал функцию ".setHtml" с QTextEdit, но она не сработала.

Я понял, что вы можете изменить цвет текста, добавить свой текст, а затем изменить его снова, и любой текст, добавленный после того, как вы изменили цвет, превращается в этот цвет, но больше ничего.

Вот пример.

redColor = QColor(255, 0, 0)
blackColor = QColor(0, 0, 0)

self.myTextEdit.setTextColor(redColor)

redText = "I want this text red"
self.myTextEdit.write(redText)


self.myTextEdit.setTextColor(blackColor)

blackText = "And this text black"
self.myTextEdit.append(blackText)

А также я хочу добавить. Функции ".write" и ".append" не работают для моего класса "QTextEdit". Не уверен, что у вас так, но у меня сработала функция ".insertPlainText". Просто конвертируйте вашу строку в "QString" как

blackText = QString(blackText)

Ответ Неджата работает для меня, заменив ".append()" на "+=":

redText = "<span style=\" font-size:8pt; font-weight:600; color:#ff0000;\" >"
redText += "I want this text red"
redText += "</span>"
self.myTextEdit.write(redText)

blackText = "<span style=\" font-size:8pt; font-weight:600; color:#000000;\" >"
blackText += "And this text black")
blackText += "</span>"
self.myTextEdit.append(blackText)

Вы должны предоставить расширенный текст для этого. Это можно сделать, создав тег и установив для свойства color значение RGB:

redText = "<span style=\" font-size:8pt; font-weight:600; color:#ff0000;\" >"    
redText.append("I want this text red")
redText.append("</span>")
self.myTextEdit.write(redText)

blackText = "<span style=\" font-size:8pt; font-weight:600; color:#000000;\" >"   
blackText.append("And this text black")
blackText.append("</span>")
self.myTextEdit.append(blackText)

поделиться редактировать

ответил 18 июня 14 в 13:45 Nejat 19.7k84875

попробовал это, он дает: Отлаживаемая программа вызвала необработанное исключение AttributeError "У объекта 'str' нет атрибута 'append'"

Я столкнулся с той же проблемой и не нашел четкого решения для ее решения. По сути, мой графический интерфейс, прежде чем выяснять, как раскрасить текст, как он работает, перекрывал цвета и не мог работать с текстами, используя независимые цвета.

Итак, вот, однажды, просматривая Интернет, я собрал некоторую информацию и обнаружил что-то вроде:

              #Import QColor, this will be responsible for doing the job.
        from PyQt5.QtGui import QColor
        from PyQt5 import uic, QtWidgets

        class Program:
            def writeonthescreen(self):
                #Set a color
                Screen.your_tex_edit.setTextColor(QColor(255, 51, 0))
                
                #Write colored text
                Screen.your_tex_edit.append('Red')

                Screen.your_tex_edit.setTextColor(QColor(0, 204, 0))
                        
                Screen.your_tex_edit.append('Green')

                Screen.your_tex_edit.setTextColor(QColor(0, 0, 255))
                        
                Screen.your_tex_edit.append('Blue')


        if __name__ == '__main__':
            '''
            "Screen" is the name we will use to name the screen to be loaded.
             Imagine that this screen contains a QTextEdit, and a button that when pressed displays your text.

            '''
            app = QtWidgets.QApplication([])
            Screen = uic.loadUi('./your_screen_path')
            Screen.button_showtext_on_the_screen.clicked.connect(Program.writeonthescreen)
            
            Screen.show()
            app.exec()

PySide очень похож на PyQt, поэтому, если кто-то задается вопросом об этом поиске PySide, этот код будет работать для PySide6.

      red_text = "I want this text red"
self.myTextEdit.setHtml(f"<span style=\"color:#ff0000;\" > {red_text} </span>")
black_text = "I want this text black"
self.myTextEdit.setHtml(f"<span style=\"color:#000000;\" > {black_text} </span>")
Другие вопросы по тегам