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

QMainWindow的showMaximized仅首次调用生效问题如何解决

问题根因

  • 调用showMaximized()时,Qt会修改窗口的WindowState为Qt.WindowMaximized,你在恢复窗口时仅调用setGeometry()修改窗口尺寸,没有清除最大化状态标记
  • 第二次调用showMaximized()时,Qt检测到窗口状态已经是Maximized,就不会触发实际的最大化渲染逻辑,导致出现isMaximized()返回True但窗口实际没有最大化的矛盾情况

修复方案

只需要在恢复窗口的槽函数里,调用showNormal()清除最大化状态即可,无需修改其他逻辑。修改后的完整代码如下:

from PyQt5 import  QtWidgets
import sys

class MyWindow(QtWidgets.QMainWindow):
    last_geometry = None
    def __init__(self):
        super().__init__()
        self.resize(960, 540)

        self.ButtonMax = QtWidgets.QPushButton(self)
        self.ButtonMax.setObjectName("ButtonMax")
        self.ButtonMax.setText("Max")
        self.ButtonMax.move(100, 100)

        self.ButtonRestore = QtWidgets.QPushButton(self)
        self.ButtonRestore.setText("Restore")
        self.ButtonRestore.setObjectName("ButtonRestore")
        self.ButtonRestore.move(300, 100)
        self.ButtonRestore.setEnabled(False)

        self.ButtonMax.clicked.connect(self.button_max_slot)
        self.ButtonRestore.clicked.connect(self.button_restore_slot)

    def button_max_slot(self):
        self.last_geometry = self.geometry()
        self.showMaximized()
        self.ButtonRestore.setEnabled(True)
        self.ButtonMax.setEnabled(False)

    def button_restore_slot(self):
        # 新增这行清除最大化状态
        self.showNormal()
        self.setGeometry(self.last_geometry)
        self.ButtonRestore.setEnabled(False)
        self.ButtonMax.setEnabled(True)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    myshow = MyWindow()
    myshow.show()
    sys.exit(app.exec_())

内容的提问来源于stack exchange,提问作者Trayvon001

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:54:07