如何修改QProgressDialog/QProgressBar的数值文本颜色?
搞定QProgressDialog/QProgressBar数值文本颜色修改问题
你碰到的问题核心是:默认样式表的写法没精准命中显示数值的子控件,所以color: white只对普通文本生效。我给你两种靠谱的解决方案:
方案一:用精准的Qt样式表搞定
QProgressDialog内部其实嵌套了QLabel(负责显示提示文本和数值)和QProgressBar,你需要针对性地给这些子控件设置样式,而不是只给QProgressDialog本身加样式。把你的样式表改成这样:
QMainWindow { background-color: rgb(80,80,80); color: white; } QProgressDialog { background-color: rgb(80,80,80); color: white; } /* 覆盖进度对话框里所有QLabel的颜色(包括数值文本) */ QProgressDialog QLabel { color: white; } /* 专门设置进度条上的数值文本颜色 */ QProgressBar::text { color: white; }
这样写就能同时把QProgressDialog里的提示文本、数值文本,还有QProgressBar上的数值文本都改成白色了。
方案二:通过代码直接操作子控件
如果你更偏向用代码而非样式表控制,确实可以通过查找子控件的方式修改颜色——不过不是用setFont()(它主要管字体样式),而是修改控件的调色板(Palette),这才是控制文本颜色的正确方式:
def pathCasingFixFUNC(self): ''' Fixes the path files that were named badly in notepad ++ ''' self.XprobBadCasing = ["List of bad file paths i'm checking"] Xprogress = QtGui.QProgressDialog("Converting Path Names...", "Cancel", 0, len(self.XprobBadCasing), self) Xprogress.setWindowModality(QtCore.Qt.WindowModal) Xprogress.setWindowTitle('Processing') # 找到对话框里所有的QLabel子控件(包含显示数值的那个) for label in Xprogress.findChildren(QtGui.QLabel): palette = label.palette() palette.setColor(QtGui.QPalette.WindowText, QtCore.Qt.white) label.setPalette(palette) # 找到内部的QProgressBar,设置它的文本颜色 progress_bar = Xprogress.findChild(QtGui.QProgressBar) if progress_bar: palette = progress_bar.palette() palette.setColor(QtGui.QPalette.Text, QtCore.Qt.white) progress_bar.setPalette(palette)
两种方法都能解决问题:如果已经在用全局样式表,推荐第一种,简洁又统一;如果需要动态调整颜色,第二种方法更灵活。
内容的提问来源于stack exchange,提问作者Adam Sirrelle
相关产品推荐
相关产品推荐

