pyqt4,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 _disibledevent=>= 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 _disibledevent=>22 print("左键(%d,%d)" % (x,y)) 23 24 def _disibledevent=>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
Tags:  pyqtx11 pyqt4安装 pyqt教程 pyqt下载 pyqt4

延伸阅读

最新评论

发表评论