2016-06-16 28 views
1

我一直在做很多研究,並且一直無法想出在PyQt4中描述這一特定代碼行的任何內容。像許多學習PyQt的人一樣,我一直在遵循zetcode的PyQt4 tutorial。我還是有點Python中的初學者,但我盡我所能去了解每一行代碼,我經過這裏,並且有一點我難住了:PyQt4:QtCore.QCoreApplication.instance()。之間的區別quit和self.close?

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)實例的指針」,但這並不能真正幫助我理解(也許我只是沒有經歷過夠了,我不知道)。

此外,有上面的代碼線和這之間的功能性差異:即self.close提到作爲唯一的反應

qbtn.clicked.connect(self.close) 

我發現this thread哪種觸摸的上這整個主題,但可能的選擇是沒有解釋的低估。任何幫助或指導將不勝感激,謝謝!

+0

有趣的問題! –

回答

1

qbtn.clicked是按鈕發出的信號。 QCoreApplication.instance()是主要的應用對象。 因此,它將按鈕信號連接到應用程序的退出插槽。

在第二個例子中,按鈕將關閉擁有按鈕的窗口。如果應用程序有多個窗口,或者在最後一次關閉窗口時沒有自動退出,它仍將繼續運行。

+0

謝謝!這有點幫助...你能解釋一下'.instance()'實際上在做什麼以及爲什麼需要它?這是絆倒我的部分。 –

+0

與C++ Qt中的qApp全局變量相同。應該只有QApplication/QCoreApplication的一個實例,所以instance()將始終返回相同的對象。現在使用函數而不是全局變量被認爲是更好的編程風格。 –