我想在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() 关闭了窗口。我希望我的程序退出。
main_window.close()
如果这是在另一篇文章中解决的,我深表歉意。我搜索了答案,但没有一个能解决我的问题。
谢谢。
发布于 2019-03-29 00:23:12
在我看来,这是一个bug,因为根据文档,如果没有顶级窗口,应用程序应该关闭,但如果窗口不是在事件循环启动后关闭,似乎没有得到验证。解决方法是使用 QTimer.singleShot(0, ...) 关闭窗口:
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)