2016-03-21 16 views
0

Ich bin sehr neu in der Verwendung von PyQt und versuche, den Signal-Slot-Mechanismus zu verstehen. Leider führt die Dokumentation für PyQt oft zu Qt-Seiten, auf denen Syntax und Parameter kaum übereinstimmen. Ich versuche, im einfachen Beispiel zwei Dinge herauszufinden.PyQt5 Signal und Slot einfache Code Erklärung

1) QAction :: triggered() ist eine void-Funktion, also wie rufen wir QAction :: triggered.connect() auf irgendeine Art von Objekt auf, das theoretisch von der triggered() -Methode zurückgegeben würde.

2) Und was ist "qApp". Ich weiß nicht, welcher Typ qApp ist oder wo es von PyQt erstellt wird, aber es scheint aus dem Nichts zu erscheinen, nur um zu einem passenden Zeitpunkt verwendet zu werden.

Ein Teil meines Missverständnisses kommt wahrscheinlich von der Tatsache, dass die C++ - und Python-Implementierung von Funktionen in Qt/PyQt nicht die gleichen sind, aber wir müssen verstehen, was ohne irgendeine Art von Python-Dokumenten vor sich geht.

import sys 
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication 
from PyQt5.QtGui import QIcon 


class Example(QMainWindow): 

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

     self.initUI() 


    def initUI(self): 

     exitAction = QAction(QIcon('exit24.png'), 'Exit', self) 
     exitAction.setShortcut('Ctrl+Q') 
     exitAction.triggered.connect(qApp.quit) 

     self.toolbar = self.addToolBar('Exit') 
     self.toolbar.addAction(exitAction) 

     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Toolbar') 
     self.show() 


if __name__ == '__main__': 

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

Antwort

1

1 /: Die Syntax ein Signal automatisch die Argumente an den speziellen Rückruf In Ihrem Fall tragen zu verbinden, gibt es kein Argument. Ich vereinfache Ihren Code, um Ihnen den Rückrufmechanismus zu zeigen

2 /: Die qApp ist eine Art Verknüpfung zu Ihrer Qapplication-Instanz. Sie können es wie im folgenden Beispiel durch Ihre QApplication-Instanz ersetzen.

Auszug aus den QApplication documentation:

Das QApplication Objekt ist über die Instanz() Funktion, die einen Zeiger entspricht den globalen qApp Zeiger zurückzugibt.

Der globale qApp Zeiger bezieht sich auf dieses Anwendungsobjekt. Es sollte nur ein Anwendungsobjekt erstellt werden.

import sys 
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication 

class Example(QMainWindow): 
    def __init__(self): 
     super(Example, self).__init__() 
     exitAction = QAction('Exit', self) 
     exitAction.triggered.connect(self.this_call) 
     self.toolbar = self.addToolBar('Exit') 
     self.toolbar.addAction(exitAction) 
     self.show() 

    def this_call(self): 
     print('bye bye') 
     app.quit() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_())