国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

淺談pyqt5中信號與槽的認識

2020-02-16 01:11:17
字體:
來源:轉載
供稿:網友

一、介紹

信號(Signal)和槽(Slot)是Qt中的核心機制,也是PyQt變成中對象之間進行通信的機制

在pyqt5中,每一個QObject對象和pyqt中所有繼承自QWidget的控件都支持信號和槽

當信號發射時,連接槽函數將會自動執行,pyqt5中信號與槽通過connect()函數連接起來的。

在pyqt5中信號主要分兩類:

1.內置信號(詳細參考各個組件)
2.自定義信號(主要用于組件之間數據的傳遞與窗口交互)

二、內置信號的簡單介紹

使用connect()方法將信號與槽函數綁定在一起,使用disconnect()函數將信號與槽解除綁定

1、按鈕點擊事件(舉例)

import sysfrom PyQt5.Qt import *class Window(QWidget):  def __init__(self, *args, **kwargs):    super().__init__(*args, **kwargs)    self.setWindowTitle('按鈕事件')    self.resize(500, 500)    self.move(400, 200)    self.btn = QPushButton('按鈕', self)    self.init_ui()  def init_ui(self):    self.btn.resize(100, 30)    self.btn.move(100, 50)    self.btn.clicked.connect(self.btn_hand)  def btn_hand(self):    print('按鈕點擊了')if __name__ == "__main__":  app = QApplication(sys.argv)  window = Window()  window.show()  sys.exit(app.exec_())

2、如果連接的事件要傳遞參數直接使用lambda函數

...def init_ui(self):  self.btn.resize(100, 30)  self.btn.move(100, 50)  self.btn.clicked.connect(lambda: self.btn_hand(1))def btn_hand(self, flag):  print('按鈕點擊了:{}'.format(flag))...

三、自定義信號

1、最基本無參數的信號與槽

import sysfrom PyQt5.Qt import *class SignalObj(QObject):  """  定義一個信號的類  """  # 自定義一個信號  sendMsg = pyqtSignal()  def __init__(self):    super().__init__()  def run(self):    self.sendMsg.emit()class Window(QWidget):  def __init__(self, *args, **kwargs):    super().__init__(*args, **kwargs)    self.setWindowTitle('自定義事件')    self.resize(500, 500)    self.move(400, 200)    self.btn = QPushButton('按鈕', self)    self.send = SignalObj()    # 將事件與槽建立關聯    self.send.sendMsg.connect(self.slot_hand)    self.init_ui()  def init_ui(self):    # 系統中自帶的事件與槽函數建立連接    self.btn.clicked.connect(self.btn_hand)  def btn_hand(self):    self.send.run()  @staticmethod  def slot_hand():    print('我是自定義的槽函數')if __name__ == "__main__":  app = QApplication(sys.argv)  window = Window()  window.show()  sys.exit(app.exec_())

2、信號中發射出數據

import sysfrom PyQt5.Qt import *class SignalObj(QObject):  """  定義一個信號的類  """  # 自定義一個信號,注意這個地方定義約束發送出去的參數類型,下面要一致  sendMsg = pyqtSignal(str)  def __init__(self):    super().__init__()  def run(self):    self.sendMsg.emit('hello')class Window(QWidget):  def __init__(self, *args, **kwargs):    super().__init__(*args, **kwargs)    self.setWindowTitle('自定義事件')    self.resize(500, 500)    self.move(400, 200)    self.btn = QPushButton('按鈕', self)    self.send = SignalObj()    # 將事件與槽建立關聯    self.send.sendMsg.connect(self.slot_hand)    self.init_ui()  def init_ui(self):    # 系統中自帶的事件與槽函數建立連接    self.btn.clicked.connect(self.btn_hand)  def btn_hand(self):    self.send.run()  @staticmethod  def slot_hand(msg):    print(f'我是自定義的槽函數:{msg}')if __name__ == "__main__":  app = QApplication(sys.argv)  window = Window()  window.show()  sys.exit(app.exec_())            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 小金县| 洪江市| 叶城县| 顺昌县| 轮台县| 涞源县| 渭南市| 青河县| 陆川县| 巍山| 文山县| 鹤庆县| 沙湾县| 乌兰县| 石嘴山市| 迭部县| 伊吾县| 江永县| 板桥市| 淳化县| 长丰县| 军事| 隆安县| 靖西县| 扶风县| 晋州市| 许昌县| 洛南县| 香河县| 日土县| 武乡县| 兰州市| 丰都县| 左贡县| 昌宁县| 台州市| 绥宁县| 静宁县| 泗水县| 胶南市| 田林县|