2016-03-21 2 views
0

Je suis très novice dans l'utilisation de PyQt et j'essaie de comprendre le mécanisme du slot de signal. Malheureusement, la documentation pour PyQt conduit souvent à des pages Qt où la syntaxe et les paramètres sont à peine les mêmes. J'essaie de comprendre 2 choses dans l'exemple simple ci-dessous.Explication du code simple du signal PyQt5 et du slot

1) QAction :: triggered() est une fonction void, alors comment appelons-nous QAction :: triggered.connect() sur un type d'objet qui serait théoriquement retourné par la méthode triggered().

2) Et qu'est-ce que "qApp". Je ne sais pas quel type qApp est ou où il est créé par PyQt, mais il semble sortir de nulle part pour moi, seulement pour être utilisé à un moment opportun. Une partie de mon incompréhension vient probablement du fait que l'implémentation des fonctions C++ et Python dans Qt/PyQt n'est pas la même mais nous devons comprendre ce qui se passe sans aucune sorte de docs python.

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_()) 

Répondre

1

1 /: La syntaxe pour connecter un signal de report automatiquement les arguments à la fonction de rappel dédié Dans votre cas, il n'y a pas d'argument. Je simplifie votre code pour vous montrer le mécanisme de rappel

2 /: la qApp est une sorte de raccourci vers votre instance Qapplication. Vous pouvez le remplacer par votre instance QApplication comme dans l'exemple suivant.

Extrait de l'QApplication documentation:

L'objet QApplication est accessible par la fonction instance() qui renvoie un pointeur équivalent au pointeur global QAPP.

Le pointeur qApp global fait référence à cet objet d'application. Un seul objet d'application doit être créé.

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_())