在學(xué)習(xí)筆記(四)中我們通過退出按鈕初步接觸了信號槽(signals & slots)的機(jī)制,可以說這個(gè)機(jī)制是 Qt 最具特色的地方也是其核心優(yōu)勢到千。信號是由事件(event)觸發(fā)的,而事件在大多數(shù)情況行啊都是由用戶通過鼠標(biāo)齐邦、鍵盤等操作生成的椎侠。本文由 Cescfangs 譯自ZetCode pyqt5系列教程 并作適當(dāng)修改。
以下的代碼通過Qslider
和QLCDNumber
實(shí)現(xiàn)了一個(gè)簡單的信號槽互動:
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_())
先創(chuàng)建滑塊和 LCD 部件:
lcd = QLCDNumber(self)
slider = QSlider(Qt.Horizontal, self)
然后通過QVboxLayout
來設(shè)置布局措拇,這個(gè)例子中最需要說的是:
slider.valueChanged.connect(lcd.display)
valueChanged()
是Qslider
的一個(gè)信號函數(shù)我纪,只要slider
的值發(fā)生改變,它就會發(fā)射一個(gè)信號丐吓,你還可以設(shè)置參數(shù)控制信號在什么時(shí)候發(fā)射浅悉,然后通過connect
連接信號的接收部件,也就是lcd
汰蜘,槽則是針對信號的一個(gè)反饋仇冯,這里是lcd.display
,即更新LCD
面板的數(shù)字信息族操。
除了valueChanged()
之外,Qslider
還有sliderPressured()
,sliderMoved()
,sliderReleased()
這些信號比被,詳細(xì)可參考Qt
官方文檔色难。