PyQt4:QtCore.QCoreApplication.instance()。quit和self.close之间的区别?

时间:2016-06-16 21:26:36

标签: python pyqt4

我一直在做很多研究,并且无法在PyQt4中提出任何描述这一特定代码行的内容。像许多其他人一样学习PyQt,我一直在关注zetcode的PyQt4 tutorial。我仍然是Python的初学者,但是我在这里经历的每一行代码都是尽力而为的,有一件事让我难过:

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):               

        qbtn = QtGui.QPushButton('Quit', self)
        qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)       

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Quit button')    
        self.show()

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

我理解除了这一行之外的所有事情:

qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)

有人能解释一下究竟发生了什么,特别是instance().quit吗?我知道它显然退出了程序,我只是不明白代码实际在做什么以及为什么。我能够对此进行挖掘的唯一信息是,instance()"返回指向应用程序的QCoreApplication(或QApplication)实例的指针"但是这并不是'真的帮助我理解(也许我只是没有足够的经验,我不知道)。

此外,上述代码行与此之间存在功能差异:

qbtn.clicked.connect(self.close)

我发现this thread在整个主题上有什么样的触动,但是提到自我的唯一反应是作为一种可能的替代方案被拒绝而没有任何解释。非常感谢任何帮助或指导,谢谢!

1 个答案:

答案 0 :(得分:2)

qbtn.clicked是按钮发出的信号。 QCoreApplication.instance()是主要的应用程序对象。 因此,它将按钮信号连接到应用程序的退出槽。

在第二个示例中,按钮将关闭拥有该按钮的窗口。如果应用程序有多个窗口,或者在最后一个窗口关闭时没有自动退出,它仍将继续运行。