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

时间:2019-03-28 14:53:22

标签: python pyqt pyqt5

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

我已经尝试过诸如“ self.object.close()”,“ app.quit()”,甚至“ self.object.destroy()”之类的代码,但是所有工作方式都相同。真正关闭窗口的唯一方法是单击窗口本身的x(关闭)。但这不是我需要的行为。我想用我的代码关闭窗口。

GET with body

我使用关闭窗口 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_()) 。我希望我的程序退出。

对于在其他帖子中解决此问题,我深表歉意。我搜索了答案,但没有一个能解决我的问题。

谢谢。

1 个答案:

答案 0 :(得分:2)

在我看来,这是一个错误,因为根据文档,如果没有顶级窗口,则应关闭应用程序,但似乎没有验证关闭窗口是否未在事件发生后关闭-循环开始。一种解决方法是使用QTimer.singleShot(0, ...)关闭窗口:

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_())