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

信号与槽的自动连接

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

on_objectname_signalname 槽名字的规则

on_okButton_clicked ~例如这个

以下是案例的具体代码



# 信号与槽的自动连接

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_())