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

Posted

技术标签:

【中文标题】在 QTextEdit 中更改单个字符串颜色【英文标题】:Changing a single strings color within a QTextEdit 【发布时间】:2014-08-08 20:11:14 【问题描述】:

我正在开发通过 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)

这可能吗?如果是这样,我该怎么做?

问候,

须藤!!

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

在对人们使用过的其他方法进行了一些研究之后,我想通了并想分享。 我用 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)

【讨论】:

【参考方案3】:

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)

【讨论】:

【参考方案4】:

我遇到了同样的问题,但我没有找到一个明确的解决方案来解决它。 基本上,我的 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()

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于在 QTextEdit 中更改单个字符串颜色的主要内容,如果未能解决你的问题,请参考以下文章

改变 Qt qtextedit 已经拥有的单词的颜色

有没有办法通过网页上的字符“中途”更改文本的颜色?

有没有办法通过网页上的字符“中途”更改文本的颜色?

如何在 Markdown 单元格 ipython/jupyter 笔记本中更改颜色?

QT textedit实现查找替换

如何设置 Qtextedit 背景颜色?