关闭方法不关闭window pyqt5
Close method does not close window pyqt5
一个基本的例子,我试图调用 close() 方法来关闭主 window,但没有关闭 window,我必须手动关闭它。
from PyQt5 import QtWidgets
import sys
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Should close")
self.close()
app=QtWidgets.QApplication(sys.argv)
w=MainWindow()
w.show()
app.exec_()
如果我把self.show()
放在init方法中,而不是使用w.show()
,window会打开和关闭,但程序不会停止运行.如何自动关闭 window 和应用程序?
如果你分析你的逻辑,你会发现你所指示的是预期的,当你创建小部件时,它正在关闭它,因为你调用了 close() 方法,但在下一行你调用了 show() 方法将使 window 可见。
为了更好地理解它,我可以告诉你,你的代码等同于:
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication (sys.argv)
w = QtWidgets.QMainWindow ()
w.setWindowTitle ("Should close")
w.close ()
w.show ()
app.exec_ ()
如您所见,window 关闭并不意味着应用程序结束,因为它们是 2 个正交概念。如果您希望 close() 方法也终止程序,那么您必须在事件循环开始时调用 close() 方法:
from PyQt5 import QtCore, QtWidgets
import sys
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Should close")
QtCore.QTimer.singleShot(0, self.close)
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
为什么eventloop在关闭唯一打开的window时需要终止应用程序?好吧,因为 evenloop(在本例中为 QApplication)使用标志 quitOnLastWindowClosed,默认情况下为真,这使得应用程序在最后一个 window 关闭时终止。
一个基本的例子,我试图调用 close() 方法来关闭主 window,但没有关闭 window,我必须手动关闭它。
from PyQt5 import QtWidgets
import sys
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Should close")
self.close()
app=QtWidgets.QApplication(sys.argv)
w=MainWindow()
w.show()
app.exec_()
如果我把self.show()
放在init方法中,而不是使用w.show()
,window会打开和关闭,但程序不会停止运行.如何自动关闭 window 和应用程序?
如果你分析你的逻辑,你会发现你所指示的是预期的,当你创建小部件时,它正在关闭它,因为你调用了 close() 方法,但在下一行你调用了 show() 方法将使 window 可见。
为了更好地理解它,我可以告诉你,你的代码等同于:
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication (sys.argv)
w = QtWidgets.QMainWindow ()
w.setWindowTitle ("Should close")
w.close ()
w.show ()
app.exec_ ()
如您所见,window 关闭并不意味着应用程序结束,因为它们是 2 个正交概念。如果您希望 close() 方法也终止程序,那么您必须在事件循环开始时调用 close() 方法:
from PyQt5 import QtCore, QtWidgets
import sys
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Should close")
QtCore.QTimer.singleShot(0, self.close)
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
为什么eventloop在关闭唯一打开的window时需要终止应用程序?好吧,因为 evenloop(在本例中为 QApplication)使用标志 quitOnLastWindowClosed,默认情况下为真,这使得应用程序在最后一个 window 关闭时终止。