往期文章:
一. 事件模型
事件模型由以下三个参与者:
- 事件源
- 事件对象(即事件)
- 事件接收者
其中,事件源是状态发生变化的对象,它将事件源中状态的变动封装,封装后的状态称为事件。事件源将事件发送给事件接收者,而后者负责处理事件。
在GUI程序中,常见的事件包括由用户触发的鼠标点击、文本输入等,也包括由其它程序触发的例如网络连接、window manger、定时器等。我们对QApplication实例化后对其使用exec_方法即可使程序进入主循环,并获取、分发事件。
二. 信号槽Signal&slots机制
PyQt5通过Signal&slots机制来实现事件模型。在这个机制中,事件源sender发送出事件signal,而对应的接收者receiver使用槽函数slots处理信号。
我们可以通过下面的例子清楚的看到这一机制的工作过程与框架:
import sys
from PyQt5.QtWidgets import QApplication,\
QWidget,\
QVBoxLayout,\
QLCDNumber,\
QSlider
from PyQt5.QtCore import Qt
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setLCDandSlider()
self.setMyWindow()
def setLCDandSlider(self):
sender = QSlider(Qt.Horizontal,self)
signal = sender.valueChanged
receiver = QLCDNumber(self)
slits = receiver.display
signal.connect(slits)
vbox = QVBoxLayout()
vbox.addWidget(receiver)
vbox.addWidget(sender)
self.setLayout(vbox)
def setMyWindow(self):
self.resize(200,200)
self.move(0,0)
self.setWindowTitle('用滑动轴控制的数字显示窗')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWindow()
sys.exit(app.exec_())
其效果如图:
我们可以通过拖动滑条来改变显示的数字:
下面我们来具体分析这段代码。首先,我们调入一个QLCDNumber函数,这个函数的作用是将数字以液晶显示器的格式显示在窗口,例如:
def setMyLCDNumber