PyQt 6.8禁用QPushButton显示空白问题咨询(该问题已在PyQt 6.9中修复)
Edit: 这个bug已经在PyQt 6.9版本中修复了。
我最近从PyQt 6.7升级到6.8版本后,在自己的应用里发现了一个奇怪的问题:部分(不是所有)被禁用的QPushButton变成了空白状态——显示为白色,而且没有任何文本。
我花了不少时间才梳理出这个bug的复现条件,必须同时满足以下几点才能重现:
- 操作系统主题必须是深色模式
- 按钮需要放在
QSplitter容器内部 - 应用样式必须设置为
fusion或windowsvista - (样式必须在主窗口初始化完成之后再设置)
补充说明:之前还曾设置过windows11样式
下面是最小可复现示例(MRE):
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QSplitter, QHBoxLayout, QLineEdit from PyQt6.QtCore import Qt class Main(QWidget): def __init__(self): super().__init__() pb1 = QPushButton('pb1') pb2 = QPushButton('pb2') pb2.setEnabled(False) pb1.clicked.connect(lambda: pb2.setDisabled(pb2.isEnabled())) random_widget = QLineEdit() btn_widg = QWidget() btn_lay = QVBoxLayout(btn_widg) btn_lay.addWidget(pb1) btn_lay.addWidget(pb2) tot_lay = QHBoxLayout(self) # tot_lay.addWidget(random_widget) # tot_lay.addWidget(btn_widg) split = QSplitter(Qt.Orientation.Horizontal) split.addWidget(random_widget) split.addWidget(btn_widg) tot_lay.addWidget(split) app = QApplication([]) # app.setStyle('windows') window = Main() app.setStyle('fusion') window.show() app.exec()
问题出现时的效果:禁用的pb2按钮显示为空白,看不到文本和正常的禁用样式。
我找到了一个简单的临时解决办法:在初始化主窗口之前先设置任意一种样式,之后再设置fusion样式,这样禁用的按钮就能正常显示了。
想请教大家两个问题:
- 有没有非Windows系统的朋友可以帮忙测试一下这个问题是否也会出现?
- 这个问题应该报告给Qt官方吗?如果需要的话,具体该怎么提交报告呢?
备注:内容来源于stack exchange,提问作者mahkitah
相关产品推荐
相关产品推荐

