浅谈pyqt5中信号与槽的认识

  


  

  

信号(信号)和槽(槽)是Qt中的核心机制,也是PyQt变成中对象之间进行通信的机制
  

  

在pyqt5中,每一个QObject对象和pyqt中所有继承自QWidget的控件都支持信号和槽
  

  

当信号发射时,连接槽函数将会自动执行,pyqt5中信号与槽通过connect()函数连接起来的。
  

  

在pyqt5中信号主要分两类:

  

1。内置信号(详细参考各个组件)
  2 .自定义信号(主要用于组件之间数据的传递与窗口交互)

  

  

使用连接()方法将信号与槽函数绑定在一起,使用断开()函数将信号与槽解除绑定

  

1,按钮点击事件(举例)
  

        导入系统   从PyQt5。Qt进口*         类窗口(QWidget):   def __init__(自我,* args, * * kwargs):   超级()。__init__ (* args, * * kwargs)   self.setWindowTitle(“按钮事件”)   自我。调整(500、500)   自我。移动(400、200)   自我。btn=QPushButton(“按钮”,自我)   self.init_ui ()      def init_ui(自我):   self.btn。调整(100年,30)   self.btn。(100年,50)      self.btn.clicked.connect (self.btn_hand)      def btn_hand(自我):   打印(“按钮点击了”)         if __name__==癬_main__”:   应用=QApplication (sys.argv)   窗口=窗口()   window.show ()   sys.exit (app.exec_ ())      

2,如果连接的事件要传递参数直接使用λ函数
  

        …   def init_ui(自我):   self.btn。调整(100年,30)   self.btn。(100年,50)      self.btn.clicked。连接(λ:self.btn_hand (1))      def btn_hand(自我、旗):   打印(“按钮点击了:{}“.format(国旗))   …      之前      

  

1,最基本无参数的信号与槽
  

        导入系统   从PyQt5。Qt进口*         类SignalObj (QObject):   ”“”   定义一个信号的类   ”“”   #自定义一个信号   sendMsg=pyqtSignal ()      def __init__(自我):   super () . __init__ ()      def运行(自我):   self.sendMsg.emit ()         类窗口(QWidget):   def __init__(自我,* args, * * kwargs):   超级()。__init__ (* args, * * kwargs)   self.setWindowTitle(“自定义事件”)   自我。调整(500、500)   自我。移动(400、200)   自我。btn=QPushButton(“按钮”,自我)   自我。发送=SignalObj ()   #将事件与槽建立关联   self.send.sendMsg.connect (self.slot_hand)   self.init_ui ()      def init_ui(自我):   #系统中自带的事件与槽函数建立连接   self.btn.clicked.connect (self.btn_hand)      def btn_hand(自我):   self.send.run ()      @staticmethod   def slot_hand ():   打印(“我是自定义的槽函数”)         if __name__==癬_main__”:   应用=QApplication (sys.argv)   窗口=窗口()   window.show ()   sys.exit (app.exec_ ())      

2,信号中发射出数据
  

        导入系统   从PyQt5。Qt进口*         类SignalObj (QObject):   ”“”   定义一个信号的类   ”“”   #自定义一个信号,注意这个地方定义约束发送出去的参数类型、下面要一致   sendMsg=pyqtSignal (str)      def __init__(自我):   super () . __init__ ()      def运行(自我):   self.sendMsg.emit(“你好”)         类窗口(QWidget):   def __init__(自我,* args, * * kwargs):   超级()。__init__ (* args, * * kwargs)   self.setWindowTitle(“自定义事件”)   自我。调整(500、500)   自我。移动(400、200)   自我。btn=QPushButton(“按钮”,自我)   自我。发送=SignalObj ()   #将事件与槽建立关联   self.send.sendMsg.connect (self.slot_hand)   self.init_ui ()      def init_ui(自我):   #系统中自带的事件与槽函数建立连接   self.btn.clicked.connect (self.btn_hand)      def btn_hand(自我):   self.send.run ()      @staticmethod   def slot_hand(味精):   print (f '我是自定义的槽函数:{味精}’)         if __name__==癬_main__”:   应用=QApplication (sys.argv)   窗口=窗口()   window.show ()   sys.exit (app.exec_ ())      

3,对于发送多种不同数据类型的事件

浅谈pyqt5中信号与槽的认识