PyQT信号槽_学习笔记 (Signals/Slots)

PyQT4.5版本以后可以采用新的信号与槽方式

1、信号定义

  通过类成员变量定义信号对象,如:

1     class MyWidget(QWidget):  
2         Signal_NoParameters = PyQt4.QtCore.pyqtSignal()                                  # 无参数信号  
3         Signal_OneParameter = PyQt4.QtCore.pyqtSignal(int)                               # 一个参数(整数)的信号  
4         Signal_OneParameter_Overload = PyQt4.QtCore.pyqtSignal([int],[str])              # 一个参数(整数或者字符串)重载版本的信号  
5         Signal_TwoParameters = PyQt4.QtCore.pyqtSignal(int,str)                          # 二个参数(整数,字符串)的信号  
6         Signal_TwoParameters_Overload = PyQt4.QtCore.pyqtSignal([int,int],[int,str])     # 二个参数([整数,整数]或者[整数,字符串])重载版本的信号  

2、信号焕发

  通过pyqtSignal对象的emit方法焕发事件,如:

复制代码
 1     class MyWidget(QWidget):  
 2         ...  
 3         def mousePressEvent(self, event):  
 4             self.Signal_NoParameters.emit()                                              # 焕发无参数信号  
 5             self.Signal_OneParameter(1)                                                  # 焕发一个参数(整数)的信号  
 6             self.Signal_OneParameter_Overload(1)                                         # 焕发一个参数(整数)重载版本的信号  
 7             self.Signal_OneParameter_Overload("abc")                                     # 焕发一个参数(字符串)重载版本的信号  
 8             self.Signal_TwoParameters (1,"abc")                                          # 焕发二个参数(整数,字符串)的信号  
 9             self.Signal_TwoParameters_Overload(1,2)                                      # 焕发二个参数(整数,整数)重载版本的信号  
10             self.Signal_TwoParameters_Overload(1,"abc")                                  # 焕发二个参数(整数,字符串)重载版本的信号  
复制代码

3、槽函数定义

  通过@PyQt4.QtCore.pyqtSlot装饰方法定义槽函数,如:

复制代码
 1     class MyWidget(QWidget):  
 2         ...  
 3         @PyQt4.QtCore.pyqtSlot()  
 4         def setValue_NoParameters(self):   
 5             '''无参数槽方法'''  
 6             pass  
 7         @PyQt4.QtCore.pyqtSlot(int)  
 8         def setValue_OneParameter(self,nIndex):   
 9            '''一个参数(整数)槽方法'''  
10             pass  
11         @PyQt4.QtCore.pyqtSlot(str)  
12         def setValue_OneParameter_String(self,szIndex):   
13            '''一个参数(字符串)的槽方法'''  
14             pass  
15         @PyQt4.QtCore.pyqtSlot(int,int)  
16         def setValue_TwoParameters(self,x,y):   
17            '''二个参数(整数,整数)槽方法'''  
18             pass  
19         @PyQt4.QtCore.pyqtSlot(int,str)  
20         def setValue_TwoParameters_String(self,x,szY):   
21            '''二个参数(整数,字符串)槽方法'''  
22             pass  
复制代码

4、信号连接

  通过pyqtSignal的connect方法连接信号和槽方法或者可调用对象,如:

复制代码
 1     app = QApplication(sys.argv)   
 2     widget = MyWidget()   
 3     widget.show()   
 4     widget.Signal_NoParameters.connect(self.setValue_NoParameters,Qt.QueuedConnection)                                          # 连接无参数信号  
 5     widget.Signal_OneParameter.connect(self.setValue_OneParameter,Qt.QueuedConnection)                                          # 连接一个参数(整数)信号  
 6     widget.Signal_OneParameter_Overload[int].connect(self.setValue_OneParameter,Qt.QueuedConnection)                            # 连接一个参数(整数)重载版本信号  
 7     widget.Signal_OneParameter_Overload[str].connect(self.setValue_OneParameter_String,Qt.QueuedConnection)                     # 连接一个参数(整数)重载版本信号  
 8     widget.Signal_TwoParameters.connect(self.setValue_TwoParameters,Qt.QueuedConnection)                                        # 连接二个参数(整数)信号  
 9     widget.Signal_TwoParameters_Overload[int,int].connect(self.setValue_TwoParameters,Qt.QueuedConnection)                      # 连接二个参数(整数,整数)重载版本信号  
10     widget.Signal_TwoParameters_Overload[int,str].connect(self.setValue_TwoParameters_String,Qt.QueuedConnection)               # 连接二个参数(整数,字符串)重载版本信号  
复制代码

5、实例

复制代码
 1     # coding=gbk  
 2       
 3     import sys  
 4     from PyQt4.QtCore import *  
 5     from PyQt4.QtGui import *  
 6       
 7     class MyWidget(QWidget):  
 8         OnClicked = pyqtSignal([int,int],[int,str])  
 9         def __init__(self, parent=None):  
10           super(MyWidget,self).__init__(parent)  
11         def mousePressEvent(self, event):  
12           if event.button() == Qt.LeftButton:  
13             self.OnClicked.emit(event.x(),event.y())  
14             event.accept()  
15           elif event.button() == Qt.RightButton:  
16             self.OnClicked[int,str].emit(event.x(),str(event.y()))  
17             event.accept()  
18           else:  
19             super(MyWidget,self).mousePressEvent(self, event)  
20       
21     def OnValueChanged_int(x,y):  
22       print("左键(%d,%d)" % (x,y))  
23       
24     def OnValueChanged_string(szX,szY):  
25       print('右键(' + str(szX) + ',' + szY + ')')  
26             
27     app = QApplication(sys.argv)   
28     widget = MyWidget()   
29     widget.show()   
30     widget.OnClicked.connect(OnValueChanged_int,Qt.QueuedConnection)  
31     widget.OnClicked[int,str].connect(OnValueChanged_string,Qt.QueuedConnection)  
32     sys.exit(app.exec_())  
复制代码
转载出处:http://blog.csdn.net/hlqyq/article/details/6713828
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值