如何在 PyQt4 中选择性地设置文本的前景色

Posted

技术标签:

【中文标题】如何在 PyQt4 中选择性地设置文本的前景色【英文标题】:How can I set selectively set the foreground color of a text in PyQt4 【发布时间】:2014-01-03 14:49:07 【问题描述】:

所以,我有一个QtGui.QTextEdit,我想根据某些条件附加文本。例如:

resultbox = QtGui.QTextEdit()
text = 'example'
if condition1:
    resultbox.append(text) '''Append text to resultbox in default color.'''
elif condition2:
    resultbox.append(text) '''Append the text in say, red and not the default black. How?'''

我正在寻找类似QString(text) 上的setForegroundColor(QtColor) 方法,它可以让我设置文本的前景色。

我尝试通过为 QTextEdit 设置颜色来使用 PyQt4 中的 stylehseets,但这不允许我有选择地为文本着色,对吧?

有什么办法可以做到吗?

谢谢

【问题讨论】:

【参考方案1】:

QTextEdit 可以处理常规的 html 内容,因此您可以使用以下方式来实现您的愿望:

resultbox = QtGui.QTextEdit()
text = 'example'
if condition1:
    resultbox.insertText(text) '''Append text to resultbox in default color.'''
elif condition2:
    resultbox.insertHtml(QString("<font color=\"red\">%1</font>").arg(text)) '''Append the text in say, red and not the default black. How?'''

【讨论】:

【参考方案2】:

使用QTextEdit.textCursor获取光标,然后使用QTextCursor.setCharFormat设置格式。

resultbox = QtGui.QTextEdit()
text = 'example'
if condition1:
    resultbox.append(text) '''Append text to resultbox in default color.'''
elif condition2:
    resultbox.textCursor().setCharFormat(specialFormat)
    resultbox.append(text) '''Append the text in say, red and not the default black. How?'''
    resultbox.textCursor().setCharFormat(defaultFormat)

或者你可以使用QTextEdit.insertHtml在文本中插入一些HTML代码,你可以通过style属性指定颜色。

【讨论】:

为什么不直接使用 HTML? @rainer 你是对的。 QTextEdit.setHtml 是一种更简单的方法。

以上是关于如何在 PyQt4 中选择性地设置文本的前景色的主要内容,如果未能解决你的问题,请参考以下文章

如何允许在 PyQt4 中调整 QMessageBox 的大小

如何更改一个Dialogbar上控件的前景色和背景色?

如何更改 MFC/VC++ 对话框应用程序中按钮的前景色(即文本或标题)

QTextEdit中选中文本修改字体与颜色,全部文本修改字体与颜色(设置调色板的前景色背景色文字颜色以及基色)

如何在视图中更改图像的前景色

更改文本框中文本的前景色和背景色