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(使用装饰器点击了按钮)
