繁体   English   中英

关闭方法不关闭 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() 方法也终止程序,那么您必须在 eventloop 启动时调用 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_()

为什么在关闭唯一打开的window时需要eventloop终止应用程序? 好吧,因为 evenloop(本例中为 QApplication)使用了标志 quitOnLastWindowClosed,默认情况下为 true,这使得应用程序在最后一个 window 关闭时终止。

暂无
暂无

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

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