2016-03-21 18 views
0

私はPyQtを使用するのが非常に新しく、シグナルスロットのメカニズムを理解しようとしています。残念ながら、PyQtのドキュメントは、構文とパラメータがほとんど同じでないQtページにつながることがよくあります。私は下の簡単な例で2つのことを理解しようとしています。PyQt5シグナルとスロットの簡単なコードの説明

1)QAction :: triggered()はvoid関数なので、理論的にはtriggered()メソッドによって返されるオブジェクトのある種のものでQAction :: triggered.connect()をどのように呼び出しますか?

2)「qApp」とは何ですか。私は、qAppの種類やPyQtによって作成された場所はわかりませんが、都合の良い時にしか使用できないように見えています。

私の誤解の一部は、おそらくQt/PyQtでの関数のC++とPythonの実装が同じではないが、私たちは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_()) 

答えて

1

1 /:あなたのケースでは、専用のコールバック に引数を運び、自動的に信号を接続するための構文、引数はありません。 コードを簡略化してコールバックメカニズムを表示します

2/qAppはQapplicationインスタンスへのショートカットの一種です。次の例のように、QApplicationインスタンスに置き換えることができます。 QApplication documentationから

エキス:

はQApplicationオブジェクトがグローバルqAppポインタへのポインタと等価を返すインスタンス()関数を介してアクセス可能です。

グローバルqAppポインタは、このアプリケーションオブジェクトを参照します。アプリケーションオブジェクトは1つだけ作成する必要があります。

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_()) 
関連する問題