Qt 状态栏颜色
我在用Python做Qt开发,有一个主窗口,底部有一个状态栏。我可以用一个QLabel在状态栏上显示消息,并且可以用类似"<font color=\"green\">In progress</font>"
这样的方式来设置消息的颜色。
我还想在状态栏上放一个临时消息,并给这个消息也设置颜色。不过这次我用的是QStatusBar::showMessage,它只接受一个QString类型的字符串,所以我不能再改变颜色了。上面的标签在这里不被识别,整个字符串"<font color=\"green\">In progress</font>"
都显示成灰色。
有没有人有什么好主意?
6 个回答
2
如果你的显示消息的文字颜色都是一样的,你可以通过QtDesigner在QStatusBar的调色板里设置窗口文字的颜色,这样临时消息就会使用这个颜色。然后,对于正常的和永久的消息,你可以使用QLabel来设置不同的颜色。
10
要设置QStatusBar的背景色或文字颜色,可以在显示消息之前更改它的样式表:
self.status.setStyleSheet("QStatusBar{padding-left:8px;background:rgba(255,0,0,255);color:black;font-weight:bold;}")
self.status.showMessage("Error Cannot determine filepath", msecs= 5000)
在初始化的时候,把QStatusBar的messageChanged(QString)连接到一个叫statusChanged()的函数。
def statusChanged(self, args):
'''If there are no arguments (the message is being removed)
change the background back to transparent/ text back to black'''
if not args:
self.status.setStyleSheet("QStatusBar{padding-left:8px;background:rgba(0,0,0,0);color:black;font-weight:bold;}")
T
4
很遗憾,QStatusBar::showMessage()
不支持富文本格式。很久以前就有人提过这个问题,想要这个功能,但似乎没有引起足够的重视。
我觉得你最好的选择是要么 继续使用普通文本消息,要么 直接操作你现有的 QLabel
。这样做需要额外的工作来处理临时状态变化,所以最终决定是否值得就看你自己了。