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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:09:23