5.2 滑块控件
《零基础入门玩转 PyQt5》 邀请码: LWskm3AS
5.2.1 滑块
程序展示
本例中,用一个滑块和一个标签展示,滑块控制标签(的值)
import sys
from PyQt5.QtWidgets import QWidget, QSlider, QLabel, QApplication
from PyQt5.QtCore import Qt
class Example(QWidget):
def __init__(self):
super().__init__()
self.label = QLabel(self)
self.label.setText('静音')
self.label.setGeometry(160, 40, 80, 30)
self.initUI()
def initUI(self):
slider = QSlider(Qt.Horizontal, self)
slider.setFocusPolicy(Qt.NoFocus)
slider.setGeometry(30, 40, 100, 30)
slider.valueChanged.connect(self.changeValue)
self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('QSlider')
self.show()
def changeValue(self, value):
if value == 0:
self.label.setText('静音')
elif 0 < value <= 30:
self.label.setText('小音')
elif 30 < value <= 80:
self.label.setText('中音')
else:
self.label.setText('大音')
if __name__ == '__main__':
app = QApplication(sys.argv)
e = Example()
sys.exit(app.exec_())
程序预览:
代码解释
创建一个水平的QSlider
slider = QSlider(Qt.Horizontal, self)
将滑块设置成不聚焦(就是没有焦点)
slider.setFocusPolicy(Qt.NoFocus)
把valueChanged
信号跟changeValue()
方法关联起来
slider.valueChanged.connect(self.changeValue)
5.2.2 进度条
QProgressBar
组件提供了水平和垂直两种进度条,进度条可以设置最大值和最小值,默认情况是0~99
程序展示
本例中,创建了一个水平的进度条和一个按钮,这个按钮控制进度条的开始和停止
import sys
from PyQt5.QtWidgets import QWidget, QProgressBar, QPushButton, QApplication
from PyQt5.QtCore import QBasicTimer
class Example(QWidget):
def __init__(self):
super().__init__()
self.pbar = QProgressBar(self)
self.pbar.setGeometry(20, 20, 240, 20)
self.b = QPushButton('Start', self)
self.b.setGeometry(20, 50, 100, 30)
self.b.clicked.connect(self.action)
self.timer = QBasicTimer()
self.step = 0
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('QProgressBar')
self.show()
def timerEvent(self, event):
if self.step >= 100:
self.timer.stop()
self.b.setText('finished')
return
self.step += 1
self.pbar.setValue(self.step)
def action(self):
if self.timer.isActive():
self.timer.stop()
self.b.setText('start')
else:
self.timer.start(100, self)
self.b.setText('stop')
if __name__ == '__main__':
app = QApplication(sys.argv)
e = Example()
sys.exit(app.exec_())
程序预览:
代码解释
创建一个QProgressBar
对象
self.pbar = QProgressBar(self)
用时间控制进度条
self.timer = QtCore.QBasicTimer()
调用start()
方法加载一个时间事件,这个方法有两个参数:过期时间和事件接收者
self.timer.start(100, self)
每个QObject
对象都有一个timerEvent()
事件处理函数,为了触发事件,重写这个方法
def timerEvent(self, event):
if self.step >= 100:
self.timer.stop()
self.b.setText('finished')
return
self.step += 1
self.pbar.setValue(self.step)
里面的doAction()
方法是用来控制开始和停止的。
def doAction(self):
if self.timer.isActive():
self.timer.stop()
self.b.setText('start')
else:
self.timer.start(100, self)
self.b.setText('stop')