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

PyQt5中QTimer触发后意外关闭两个窗口的问题求助

问题原因与解决方案

问题原因

QtCore.QCoreApplication.quit() 是终止整个Qt应用进程的方法,调用后会关闭所有关联窗口并结束程序,这就是触发后两个窗口都被关闭的核心原因。你需要的是仅关闭当前窗口,而非退出整个应用。

解决步骤

  1. 在setupUi方法中保存当前窗口实例,方便后续调用关闭操作:
    在setupUi函数开头添加一行代码:

    self.window = cityquestion1
    
  2. 修改yes方法中的定时器触发逻辑,把退出应用改为关闭当前窗口:
    将

    QtCore.QTimer.singleShot(3000, QtCore.QCoreApplication.quit)
    

    替换为:

    QtCore.QTimer.singleShot(3000, self.window.close)
    

修改后的关键代码片段

class Ui_cityquestion1(object):
    def setupUi(self, cityquestion1):
        self.window = cityquestion1  # 保存当前窗口实例
        cityquestion1.setObjectName("cityquestion1")
        # ... 其余原有代码保持不变 ...

    def yes(self):
        self.start = True
        self.timeryes.start(1000)
        self.labelyes.setGeometry(QtCore.QRect(0, 0, 1223, 800))
        self.labelyes.show()
        # 替换为关闭当前窗口
        QtCore.QTimer.singleShot(3000, self.window.close)
        # ... 其余原有代码保持不变 ...

额外优化提示

你的代码中重复调用了两次self.retranslateUi(cityquestion1)和QtCore.QMetaObject.connectSlotsByName(cityquestion1),可删除其中一组,避免冗余操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:23:10