在学习笔记(四)中我们通过退出按钮初步接触了信号槽(signals & slots)的机制,可以说这个机制是 Qt 最具特色的地方也是其核心优势。信号是由事件(event)触发的,而事件在大多数情况行啊都是由用户通过鼠标、键盘等操作生成的。本文由 Cescfangs 译自ZetCode pyqt5系列教程 并作适当修改。
以下的代码通过Qslider
和QLCDNumber
实现了一个简单的信号槽互动:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QSlider, QVBoxLayout
class exp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
vbox = QVBoxLayout()
lcd = QLCDNumber(self)
slider = QSlider(Qt.Horizontal, self)
vbox.addWidget(lcd)
vbox.addWidget(slider)
self.setLayout(vbox)
slider.valueChanged.connect(lcd.display)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle(' signals-slots')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = exp()
sys.exit(app.exec_())
先创建滑块和 LCD 部件:
lcd = QLCDNumber(self)
slider = QSlider(Qt.Horizontal, self)
然后通过QVboxLayout
来设置布局,这个例子中最需要说的是:
slider.valueChanged.connect(lcd.display)
valueChanged()
是Qslider
的一个信号函数,只要slider
的值发生改变,它就会发射一个信号,你还可以设置参数控制信号在什么时候发射,然后通过connect
连接信号的接收部件,也就是lcd
,槽则是针对信号的一个反馈,这里是lcd.display
,即更新LCD
面板的数字信息。
除了valueChanged()
之外,Qslider
还有sliderPressured()
,sliderMoved()
,sliderReleased()
这些信号,详细可参考Qt
官方文档。
网友评论