微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Close方法不关闭窗口pyqt5

如何解决Close方法不关闭窗口pyqt5

一个基本的例子,我试图调用 close() 方法关闭主窗口,但没有关闭窗口,我必须手动关闭它。

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(),窗口将打开和关闭,但程序不会停止运行。如何自动关闭窗口和应用程序?

解决方法

如果您分析您的逻辑,您将看到您所指示的内容是预期的,当您创建小部件时,它正在关闭它,因为您调用了 close() 方法,但在下一行您调用了 show() 方法,该方法将使窗口可见。

为了更好地理解它,我可以告诉您,您的代码等效于:

from PyQt5 import QtWidgets
import sys

app = QtWidgets.QApplication (sys.argv)
w = QtWidgets.QMainWindow ()
w.setWindowTitle ("Should close")
w.close ()
w.show ()
app.exec_ ()

正如您所注意到的,窗口关闭并不意味着应用程序结束,因为它们是 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_()

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。