目标
本片博客目标是为了学习和理解,pyqt5 中的事件、信号。
概念
事件(event)
所有的GUI程序都是事件驱动的。事件主要由用户触发,但也可能有其他触发方式:例如网络连接、window manager或定时器。当我们调用QApplication的exec_()方法时会使程序进入主循环。主循环会获取并分发事件。
在事件模型中,有三个参与者:
- 事件源
- 事件对象
- 事件接收者
事件源是状态发生变化的对象。它会生成事件。事件(对象)封装了事件源中状态的变动。事件接收者是要通知的对象。事件源对象将事件处理的工作交给事件接收者。
举例:
一个webfrom表的提交操作,需要经过点击提交按钮->触发click事件->并执行此事件。其中按钮就是事件接收者,onclick方法是事件源,onclick指向的方法是事件对象。
信号&槽
PyQt5有一个独特的signal&slot(信号槽)机制来处理事件。信号槽用于对象间的通信。signal在某一特定事件发生时被触发,slot可以是任何callable对象。当signal触发时会调用与之相连的slot。
实践
案例1(signals&slots-helloword)
1 | # -*- coding: utf-8 -*- |
其中 btn1.clicked.connect(self.buttonClicked) 中的self.buttonClicked就是槽中插入的信号
案例2(自定义-signals)
1 | # -*- coding: utf-8 -*- |
其中Communicate().closeApp为自定义信号
总结
事件
pyqt5 中的事件源用来生成事件、事件对象用于封装事件源、事件接收者就是要使用事件的对象。
信号槽
信号signals用于描述个人通过事件要做的一些事情。
槽slots用于将信号和事件绑定在一起。