首页 > 代码库 > PYQT基础知识信号+例子

PYQT基础知识信号+例子

QtCore.QObject.connectASIGNALobj,B

A.SIGNAL.CONNECT(B)

QtCore.QObject.connect(a.obj,SIGNAL(obj),B,SLOT(obj2))

1.一个信号可以与另一个信号相连

 

connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1))

 

即表示Object1的信号1发射可以触发Object2的信号1发射。

 

2.表示一个信号可以与多个槽相连

 

connect(Object1,SIGNAL(signal2),Object2,SLOT(slot2))

 

connect(Object1,SIGNAL(signal2),Object3,SLOT(slot1))

 

3.表示同一个槽可以响应多个信号

 

connect(Object1,SIGNAL(signal2),Object2,SLOT(slot2))

 

connect(Object3,SIGNAL(signal2),Object2,SLOT(slot2))

断开连接disconnect方法与connect一样

self.disconnect(self.tcpSocket, QtCore.SIGNAL("readyRead()"), self.readyRead)

 

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

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])     # 二个参数([整数,整数]或者[整数,字符串])重载版本的信号  

2、信号焕发

 

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

 

[python] view plaincopy

 

    class MyWidget(QWidget):  

        ...  

        def mousePressEvent(self, event):  

            self.Signal_NoParameters.emit()                                              # 焕发无参数信号  

            self.Signal_OneParameter(1)                                                  # 焕发一个参数(整数)的信号  

            self.Signal_OneParameter_Overload(1)                                         # 焕发一个参数(整数)重载版本的信号  

            self.Signal_OneParameter_Overload("abc")                                     # 焕发一个参数(字符串)重载版本的信号  

            self.Signal_TwoParameters (1,"abc")                                          # 焕发二个参数(整数,字符串)的信号  

            self.Signal_TwoParameters_Overload(1,2)                                      # 焕发二个参数(整数,整数)重载版本的信号  

            self.Signal_TwoParameters_Overload(1,"abc")                                  # 焕发二个参数(整数,字符串)重载版本的信号  

 

3、槽函数定义

python] view plaincopy

 

    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  

 

4、信号连接

 

通过pyqtSignalconnect方法连接信号和槽方法或者可调用对象,:

 

[python] view plaincopy

 

    app = QApplication(sys.argv)   

    widget = MyWidget()   

    widget.show()   

    widget.Signal_NoParameters.connect(self.setValue_NoParameters,Qt.QueuedConnection)                                          # 连接无参数信号  

    widget.Signal_OneParameter.connect(self.setValue_OneParameter,Qt.QueuedConnection)                                          # 连接一个参数(整数)信号  

    widget.Signal_OneParameter_Overload[int].connect(self.setValue_OneParameter,Qt.QueuedConnection)                            # 连接一个参数(整数)重载版本信号  

    widget.Signal_OneParameter_Overload[str].connect(self.setValue_OneParameter_String,Qt.QueuedConnection)                     # 连接一个参数(整数)重载版本信号  

    widget.Signal_TwoParameters.connect(self.setValue_TwoParameters,Qt.QueuedConnection)                                        # 连接二个参数(整数)信号  

    widget.Signal_TwoParameters_Overload[int,int].connect(self.setValue_TwoParameters,Qt.QueuedConnection)                      # 连接二个参数(整数,整数)重载版本信号  

    widget.Signal_TwoParameters_Overload[int,str].connect(self.setValue_TwoParameters_String,Qt.QueuedConnection)               # 连接二个参数(整数,字符串)重载版本信号  

 

 

sys.exit(app.exec_())5、实例

[python] view plaincopy

 

    # coding=gbk  

      

    import sys  

    from PyQt4.QtCore import *  

    from PyQt4.QtGui import *  

      

    class MyWidget(QWidget):  

        OnClicked = pyqtSignal([int,int],[int,str])  

        def __init__(self, parent=None):  

          super(MyWidget,self).__init__(parent)  

        def mousePressEvent(self, event):  

          if event.button() == Qt.LeftButton:  

            self.OnClicked.emit(event.x(),event.y())  

            event.accept()  

          elif event.button() == Qt.RightButton:  

            self.OnClicked[int,str].emit(event.x(),str(event.y()))  

            event.accept()  

          else:  

            super(MyWidget,self).mousePressEvent(self, event)  

      

    def OnValueChanged_int(x,y):  

      print("左键(%d,%d)" % (x,y))  

      

    def OnValueChanged_string(szX,szY):  

      print(‘右键(‘ + str(szX) + ‘,‘ + szY + ‘)‘)  

            

    app = QApplication(sys.argv)   

    widget = MyWidget()   

    widget.show()   

    widget.OnClicked.connect(OnValueChanged_int,Qt.QueuedConnection)  

    widget.OnClicked[int,str].connect(OnValueChanged_string,Qt.QueuedConnection)  

    sys.exit(app.exec_())