一:事件(event)
与控制台程序不同,基于 GUI 的应用程序是由事件驱动的。函数或方法响应用户的操作而执行,用户的每一次操作(如按钮被点击、最小化窗口)都称之为事件。
二:信号
对象状态的变化或事件发生时发出的通知。每个派生自 QObject 类的 PyQt 6 组件能够发出信号响应一个或多个事件,信号本身并不执行任何操作,但它可以连接到槽。
三:连接(connect)
将信号和槽关联起来,使得信号发出时自动调用对应的槽执行操作。
四:槽
信号发出时调用的函数,用于处理接收到的信号。
五:使用
我们对上一章的代码进行以下修改:
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Hello World")
window.resize(600, 600)
button = QPushButton(text="How's it going?", parent=window)
button.move(200, 200)
button.resize(200, 50)
button.show()
window.show()
sys.exit(app.exec())
运行上方代码,将会显示一个带有按钮的窗口:
但是,我们点击按钮毫无反应,这不是我们的预期效果。这时,就要用到信号与槽来让骨架与神经连接起来了。
从 Designer 中不难看出,对于 pushButton,继承了 QAbstractButton 类 ,其中有负责被点击后的信号:clicked()。
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton
def answer():
print("Everything goes well.")
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("Hello World")
window.resize(600, 600)
button = QPushButton(text="How's it going?", parent=window)
button.move(200, 200)
button.resize(200, 50)
button.clicked.connect(answer)
button.show()
window.show()
sys.exit(app.exec())
这时再运行,点击按钮控制台会输出 “Everything goes well.”。恭喜你,完成了一次信号与槽的连接。
六:最后
你已经完成了 PyQt 6 的初步学习,以后的所有组件都会以此为基础实现。