信号(signal)和槽(slot)是qt的核心机制。在创建事件循环之后,通过建立信号和槽的连接就可以实现对象之间的通信。当信号发射时,连接的槽函数就会自动执行,在pyqt5中,信号和槽通过QObject.signal.connect()连接。所有从QOject类或其子类如QWidget派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射出去。槽用于接收信号,但它们是普通的对象成员函数,多个信号可以与单个槽进行连接,单个信号也可以与多个槽进行连接。总之,信号和槽构建了一种强大的空间编程机制。
示例
关闭窗口控件会发射很多信号,选择一个信号之后就会生成对应的槽函数对按钮发射的该信号进行处理。关闭窗口按钮单机会发射clicked信号,这个信号会被Form窗口的槽函数close()捕捉到,并触发该窗口的close行为。
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(602, 559)
self.closeWinBtn = QtWidgets.QPushButton(Form)
self.closeWinBtn.setGeometry(QtCore.QRect(240, 140, 75, 23))
self.closeWinBtn.setObjectName("closeWinBtn")
self.retranslateUi(Form)
self.closeWinBtn.clicked.connect(Form.close) # clicked信号,槽函数form.close()
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.closeWinBtn.setText(_translate("Form", "关闭窗口"))