Qt采用信号槽来设定UI界面上元素动作的事件绑定。自Qt4.5开始,引入了一个新的信号槽与事件绑定的方法。界面上控件可以发出的默认内容都已经由Qt库定义好了,我们只需要定义处理方法即可。
从Designer设计出的控件中会使用setObjectName设定控件的名字,这个名字就可以让我们快捷的定义指定信号槽对应的处理方法。通过@PyQt4.QtCore.pyqtslot()修饰方法可以完成这一动作。定义方法如下:
1 | @PyQt4 .QtCore.pyqtSlot(参数) |
2 | def on_对象名称_信号名称( self ,参数): |
这种定义方法同样适用与自定义的信号槽。
首先需要定义信号:
1 | class MyWidget(QWidget): |
2 | Signal_NoParameters = PyQt4.QtCore.pyqtSignal() |
3 | Signal_OneParameter = PyQt4.QtCore.pyqtSignal( int ) |
然后定义信号的激发:
1 | class MyWidget(QWidget): |
2 | def mousePressEvent( self , event): |
3 | self .Signal_NoParameters.emit() |
4 | self .Signal_OneParameter.emit( 1 ) |
定义槽函数:
1 | class MyWidget(QWidget): |
2 | @PyQt4 .QtCore.pyqtSlot() |
3 | def setValue_NoParameters( self ): |
5 | @PyQt4 .QtCore.pyqtSlot( int ) |
6 | def setValue_OneParameter( self ,nIndex): |
之后需要将信号与槽进行连接:
1 | widget.Signal_NoParameters.connect( self .setValue_NoParameters,Qt.QueuedConnection) |
2 | widget.Signal_OneParameter.connect( self .setValue_OneParameter,Qt.QueuedConnection) |