PyQt5中QTimer触发后意外关闭两个窗口的问题求助
问题原因与解决方案
问题原因
QtCore.QCoreApplication.quit() 是终止整个Qt应用进程的方法,调用后会关闭所有关联窗口并结束程序,这就是触发后两个窗口都被关闭的核心原因。你需要的是仅关闭当前窗口,而非退出整个应用。
解决步骤
在
setupUi方法中保存当前窗口实例,方便后续调用关闭操作:
在setupUi函数开头添加一行代码:self.window = cityquestion1修改
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
相关产品推荐
相关产品推荐

