摘自 http://www.cnblogs.com/caomingongli/archive/2011/09/19/2180904.html
pyqt中信号与槽的参数传递。
当信号与槽函数的参数数量相同时,它们参数类型要完全一致。
信号与槽不能有缺省参数。
当信号的参数与槽函数的参数数量不同时,只能是信号的参数数量多于槽函数的参数数量,且前面相同数量的参数类型应一致,信号中多余的参数会被忽略。
此外,在不进行参数传递时,信号槽绑定时也是要求信号的参数数量大于等于槽函数的参数数量。这种情况一般是一个带参数的信号去绑定一个无参数的槽函数。
可以出传递的参数类型有很多种:str、int、list、object、float、tuple、dict等等
槽的方法定义,主要是指明类型
class MyWidget(QWidget):
...
@PyQt4.QtCore.pyqtSlot()
def setValue_NoParameters(self):
'''无参数槽方法'''
pass
@PyQt4.QtCore.pyqtSlot(int)
def setValue_OneParameter(self,nIndex):
'''一个参数(整数)槽方法'''
pass
@PyQt4.QtCore.pyqtSlot(str)
def setValue_OneParameter_String(self,szIndex):
'''一个参数(字符串)的槽方法'''
pass
@PyQt4.QtCore.pyqtSlot(int,int)
def setValue_TwoParameters(self,x,y):
'''二个参数(整数,整数)槽方法'''
pass
@PyQt4.QtCore.pyqtSlot(int,str)
def setValue_TwoParameters_String(self,x,szY):
'''二个参数(整数,字符串)槽方法'''
pass
class MyWidget(QWidget):
Signal_NoParameters = PyQt4.QtCore.pyqtSignal() # 无参数信号
Signal_OneParameter = PyQt4.QtCore.pyqtSignal(int) # 一个参数(整数)的信号
Signal_OneParameter_Overload = PyQt4.QtCore.pyqtSignal([int],[str]) # 一个参数(整数或者字符串)重载版本的信号
Signal_TwoParameters = PyQt4.QtCore.pyqtSignal(int,str) # 二个参数(整数,字符串)的信号
Signal_TwoParameters_Overload = PyQt4.QtCore.pyqtSignal([int,int],[int,str]) # 二个参数([整数,整数]或者[整数,字符串])重载版本的信号
class MyWidget(QWidget):
...
def mousePressEvent(self, event):
self.Signal_NoParameters.emit() # 焕发无参数信号
self.Signal_OneParameter.emit(1) # 焕发一个参数(整数)的信号
self.Signal_OneParameter_Overload.emit(1) # 焕发一个参数(整数)重载版本的信号
self.Signal_OneParameter_Overload.emit("abc") # 焕发一个参数(字符串)重载版本的信号
self.Signal_TwoParameters.emit(1,"abc") # 焕发二个参数(整数,字符串)的信号
self.Signal_TwoParameters_Overload.emit(1,2) # 焕发二个参数(整数,整数)重载版本的信号
self.Signal_TwoParameters_Overload.emit(1,"abc") # 焕发二个参数(整数,字符串)重载版本的信号
mousePressEvent被调用时,触发了Signal_OneParameter_Overload信号,传递参数1,然后信号又触发了setValue_OneParameter。类似一个传递的过程
self.Signal_OneParameter[int].connect(self.setValue_OneParameter)