pyqt5开发核心机制:信号与槽(Slot)

@pyqtSlot() def on_pushButton_clicked(self): print(1按钮被按下)

其中 @pyqtSlot() 为修饰器,为了区分不同触发的名字

修饰器可以不使用,一样可以识别,但是如果用户一旦使用请务必与触发的机制一一对应,如在传入值为int时,必须将修饰器写为如下:

@pyqtSlot("int")

否则不会有触发。

用装饰器信号与槽

1、使用格式

@PyQt5.QtCore.pyqtSlot(参数)
def on_发送者对象名称_发射信号名称(self,参数):
 pass

2、注意点,使用装饰器必须定义两个东西

QMetaObject.connectSlotsByName(self)

给需要绑定事件的定义一个id(self.btn.setObjectName(名称))

3、按钮的普通事件

...
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.clicked.connect(self.btn_hand)
    
  @staticmethod
  def btn_hand():
    print(使用connect点击了按钮)
...

4、使用装饰器后的事件

...
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()
    # 要在加载组件后使用
    QMetaObject.connectSlotsByName(self)

  def init_ui(self):
  # 这个地方定义的名字直接在下面使用
    self.btn.setObjectName(btn)

  @pyqtSlot()
  def on_btn_clicked(self):
    print(使用装饰器点击了按钮)
经验分享 程序员 微信小程序 职场和发展