首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在pyqt5中关闭窗口并终止程序?程序卡住了

如何在pyqt5中关闭窗口并终止程序?程序卡住了
EN

Stack Overflow用户
提问于 2019-03-28 22:53:22
回答 1查看 755关注 0票数 1

我想在pyqt5中创建一个窗口,然后关闭它。由于某种原因,程序在关闭窗口后不退出。它卡住了。我已经阅读了几篇相关的文章,但没有一个给出明确的答案。

我已经尝试过像"self.object.close()","app.quit()",甚至"self.object.destroy()“这样的代码,但它们的工作方式都是一样的。真正关闭窗口的唯一方法是单击窗口本身的x(关闭)。但这不是我需要的行为。我想用我的代码关闭窗口。

代码语言:javascript
运行
复制
import sys
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5 import QtGui 
from PyQt5.QtCore import pyqtSlot, pyqtSignal

class window(QtWidgets.QMainWindow):

    def __init__(self):
        super().__init__()        
        self.setGeometry(300, 300, 480, 300)
        self.setWindowTitle('Hello World')        
        self.setWindowLayout()

    def setWindowLayout(self):
        self.w = QtWidgets.QWidget(self)         
        self.layout = QtWidgets.QHBoxLayout()        
        self.label = QtWidgets.QLabel('Hello World Label') 
        self.layout.addWidget(self.label)                 
        self.w.setLayout(self.layout) 


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)  
    main_window = window()
    main_window.show()    
    main_window.close() 
    sys.exit(app.exec_())

一旦我使用main_window.close()关闭了窗口。我希望我的程序退出。

如果这是在另一篇文章中解决的,我深表歉意。我搜索了答案,但没有一个能解决我的问题。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 00:23:12

在我看来,这是一个bug,因为根据文档,如果没有顶级窗口,应用程序应该关闭,但如果窗口不是在事件循环启动后关闭,似乎没有得到验证。解决方法是使用QTimer.singleShot(0, ...)关闭窗口:

代码语言:javascript
运行
复制
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class window(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()        
        self.setGeometry(300, 300, 480, 300)
        self.setWindowTitle('Hello World')        
        self.setWindowLayout()

    def setWindowLayout(self):
        self.w = QtWidgets.QWidget(self)         
        self.layout = QtWidgets.QHBoxLayout()        
        self.label = QtWidgets.QLabel('Hello World Label') 
        self.layout.addWidget(self.label)                 
        self.w.setLayout(self.layout) 

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)  
    main_window = window()
    main_window.show()    
    QtCore.QTimer.singleShot(0, main_window.close) # <---
    sys.exit(app.exec_())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55400635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档