PyQt5多窗口问题:点击Game按钮后窗口闪现消失的原因与解决方法
PyQt5 弹窗闪现消失的问题解决
问题原因
你在game_window方法中创建的game_window是局部变量,当方法执行完成后,Python的垃圾回收机制会立即销毁这个窗口对象,导致窗口刚显示就被关闭。Qt的窗口控件如果没有被持久化的引用绑定,就会出现这种闪现后消失的现象。
解决方法
提供两种可行的修复方案,根据你的需求选择:
方案1:将窗口绑定为实例属性
把局部的窗口变量改为类的实例属性,让它被Ui_Dialog对象持有引用,避免被垃圾回收:
def game_window(self): # 用self.game_window代替局部变量game_window self.game_window = QtWidgets.QDialog() self.game_window.setWindowTitle("Game") self.game_window.resize(600, 600) self.game_window.show()
如果想使用你已经定义好的GameWindow类,也可以这样修改:
def game_window(self): self.game_window = GameWindow() self.game_window.setWindowTitle("Game") self.game_window.resize(600, 600) self.game_window.show()
方案2:以模态方式显示窗口
如果希望弹出游戏窗口后,主窗口暂时无法操作(模态窗口),可以用exec_()方法替代show()。exec_()会阻塞当前线程直到窗口关闭,窗口对象自然不会被提前回收:
def game_window(self): game_window = QtWidgets.QDialog() game_window.setWindowTitle("Game") game_window.resize(600, 600) game_window.exec_() # 替换原有的show()方法
内容的提问来源于stack exchange,提问作者Dot0707
相关产品推荐
相关产品推荐

