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
相关产品推荐
相关产品推荐

