繁体   English   中英

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

[英]how to close a window in pyqt5 and terminate the program? program gets stuck

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

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

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

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

谢谢。

在我看来,这是一个错误,因为根据文档,如果没有顶级窗口,则应关闭该应用程序,但是,如果没有在事件循环启动后关闭该窗口,则似乎无法验证。 解决方法是使用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_())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM