pyqt中信号与槽的参数传递。

摘自  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")                                  # 焕发二个参数(整数,字符串)重载版本的信号

信号触发的结果传给槽(注意格式,信号实际的值在emit中,连接的槽,只传名称)

mousePressEvent被调用时,触发了Signal_OneParameter_Overload信号,传递参数1,然后信号又触发了setValue_OneParameter。类似一个传递的过程

self.Signal_OneParameter[int].connect(self.setValue_OneParameter)

你可能感兴趣的:(pyqt中信号与槽的参数传递。)