2016-03-21 61 views
0

我对使用PyQt非常新,我试图了解信号插槽机制。不幸的是,PyQt的文档经常会导致Qt页面的语法和参数几乎不相同。我想在下面的简单例子中找出2件事。 1)QAction :: triggered()是一个void函数,那么我们如何在理论上由trigger()方法返回的某种对象上调用QAction :: triggered.connect()。PyQt5信号和插槽简单代码说明

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指针指向此应用程序对象。应该只创建一个应用程序对象。

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