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()                                  # 无参数信号  
       <span style="color:#FF0000;"> Signal_OneParameter = PyQt4.QtCore.pyqtSignal(int) </span>                              # 一个参数(整数)的信号  
        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()                                              # 焕发无参数信号  
          <span style="color:#FF0000;">  self.Signal_OneParameter.emit(1)   </span>                                               # 焕发一个参数(整数)的信号  
            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)

评论 1 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值