在QT5中, 最重要的核心就是信号与槽机制, 通过信号去触发槽函数. 可以自己写信号和槽的绑定, 也可以借助里面的方法进行自动绑定.

信号与槽的自动连接

信号与槽自动连接的匹配规则是

on_objectname_signalname 槽名字的规则

on_okButton_clicked ~例如这个

以下是案例的具体代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46


# 信号与槽的自动连接

from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication ,QWidget ,QHBoxLayout , QPushButton
import sys

class AutoSignalSlot(QWidget):
def __init__(self):
super().__init__()
self.resize(500, 500)

self.okButton = QPushButton("ok", self)
# 没有self , 不影响UI界面,也不影响用connect 绑定槽, 但是影响自动连接槽
# self.okButton = QPushButton("ok")
self.okButton.setObjectName("okButton")
# self.cancelButton = QPushButton("cancel", self)
self.cancelButton = QPushButton("cancel")
# self.cancelButton.clicked.connect(self.on_cancelButton_clicked)

self.cancelButton.setObjectName("cancelButton")
layout = QHBoxLayout()
layout.addWidget(self.okButton)
layout.addWidget(self.cancelButton)
# 设置自动连接
QtCore.QMetaObject.connectSlotsByName(self)

self.setLayout(layout)

@QtCore.pyqtSlot()
def on_okButton_clicked(self):
print('点击了 ok 按钮')

@QtCore.pyqtSlot()
def on_cancelButton_clicked(self):
print("点击了cancel 按钮")


if __name__ == '__main__':
app = QApplication(sys.argv)
win = AutoSignalSlot()
win.show()
sys.exit(app.exec_())