在QTextEdit中更改单个字符串的颜色

11

我正在使用PyQt和Qt4开发GUI。在我的GUI中,我有一个QTextEdit,其中包含各种数据。是否有一种方法可以操作QTextEdit中的某个单词的颜色?

例如:

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

这个可能吗?如果可以,我该怎么做呢?

谢谢!

sudo!!

5个回答

12

您应该为它提供丰富的文本。可以通过创建一个 <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)

8

经过一些对其他人使用的方法的研究,我弄明白了并想分享一下。

我尝试使用QTextEdit的“.setHtml”函数,但它没有起作用。

我发现你可以改变文本颜色,添加你的文本,然后再次更改颜色,任何在你改变颜色后添加的文本都会变成那种颜色,但其他文本不会。

以下是一个例子。

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)

1
Nejat的答案对我有用,将“.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)

0

我曾经遇到同样的问题,但没有找到明确的解决方案来解决它。 基本上,在弄清楚如何使文本以正确的方式着色之前,我的GUI重叠了颜色,并且无法使用独立颜色的文本。

因此,有一天在浏览互联网时,我收集了一些信息并发现了类似以下内容的东西:

        #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_text_edit.setTextColor(QColor(255, 51, 0))
                
                #Write colored text
                Screen.your_text_edit.append('Red')

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

                Screen.your_tex_edit.setTextColor(QColor(0, 0, 255))
                        
                Screen.your_text_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()

0

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>")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接