Изменение цвета одной строки в 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>")