You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt 6.8禁用QPushButton显示空白问题咨询(该问题已在PyQt 6.9中修复)

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样式,这样禁用的按钮就能正常显示了。

想请教大家两个问题:

  1. 有没有非Windows系统的朋友可以帮忙测试一下这个问题是否也会出现?
  2. 这个问题应该报告给Qt官方吗?如果需要的话,具体该怎么提交报告呢?

备注:内容来源于stack exchange,提问作者mahkitah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:03:13