滑块

QSlider是个有一个小滑块的组件,这个小滑块能拖着前后滑动,这个经常用于修改一些具有范围的数值,比文本框或者点击增加减少的文本框(spin box)方便多了。

本例用一个滑块和一个标签展示。标签为一个图片,滑块控制标签(的值)。先准备四个分别表示静音、小音量、中音量、大音量的图标,文件名分别叫mute.png, min.png, med.png, max.png。

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial 
This example shows a QSlider widget.
Author: Jan Bodnar
Website: zetcode.com 
Last edited: August 2017
"""
from PyQt5.QtWidgets import (QWidget, QSlider, 
    QLabel, QApplication)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
import sys
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):  
        sld = QSlider(Qt.Horizontal, self)
        sld.setFocusPolicy(Qt.NoFocus)
        sld.setGeometry(30, 40, 100, 30)
        sld.valueChanged[int].connect(self.changeValue)
        self.label = QLabel(self)
        self.label.setPixmap(QPixmap('mute.png'))
        self.label.setGeometry(160, 40, 80, 30)
        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QSlider')
        self.show()
    def changeValue(self, value):
        if value == 0:
            self.label.setPixmap(QPixmap('mute.png'))
        elif value > 0 and value <= 30:
            self.label.setPixmap(QPixmap('min.png'))
        elif value > 30 and value < 80:
            self.label.setPixmap(QPixmap('med.png'))
        else:
            self.label.setPixmap(QPixmap('max.png'))
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

这里是模拟的音量控制器。拖动滑块,能改变标签位置的图片。

sld = QSlider(Qt.Horizontal, self)

创建一个水平的QSlider

self.label = QLabel(self)
self.label.setPixmap(QPixmap('mute.png'))

创建一个QLabel组件并给它设置一个静音图标。

sld.valueChanged[int].connect(self.changeValue)

valueChanged信号跟changeValue()方法关联起来。

if value == 0:
    self.label.setPixmap(QPixmap('mute.png'))
...

根据音量值的大小更换标签位置的图片。这段代码是:如果音量为0,就把图片换成 mute.png。

下一节:进度条是用来展示任务进度的(我也不想这样说话)。它的滚动能让用户了解到任务的进度。