跳至正文
View Categories

1 min read

    主要内容 #

  1. QSlider介绍
  2. QProgressBar介绍

完成效果 #

完成本节课程,能学会在窗口应用程序上使用滑动条和进度条控件。
效果如下:

收获 #

学习完本节内容,我们会学会如何创建QSlider,QProgressBar对象,以及通过进阶示例深入体会其作用。

1.QSlider介绍 #

QSlider是个有一个小滑块的组件,这个小滑块能拖着前后滑动,这个经常用于修改一些具有范围的数值。
以下是QSlider的简单示例:

# 注意,以下包都要导入,后面内容会用到
from PyQt5.QtWidgets import QWidget, QSlider, QProgressBar, QPushButton, QApplication
from PyQt5.QtCore import Qt, QBasicTimer
import sys

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):      
        # 参数Qt.Horizontal设置滑块为水平方向滑动
        sld = QSlider(Qt.Horizontal, self)  # 创建一个QSlider对象
        sld.setGeometry(30, 40, 100, 30)  # 指定位置和大小

        # 设置窗口的位置和大小,前两个参数表示离屏幕左上角的坐标,后两个参数表示窗口的大小
        self.setGeometry(300, 300, 500, 500)
        self.setWindowTitle('QSlider')  # 设置窗口的标题
        self.show()  # 显示窗口
  

app = QApplication(sys.argv)    # 创建应用程序
ex = Example()  # 创建窗口对象
sys.exit(app.exec_())   # 设置关闭窗口后结束进程

拓展练习:运行上述程序,拖动滑块,体会QSlider的功能。

2.QProgressBar介绍 #

进度条是用来展示任务进度的,它的滚动能让用户了解到任务的进度。
QProgressBar组件提供了水平和垂直两种进度条,进度条可以设置最大值和最小值,默认情况是0~99。
以下是QProgressBar的较复杂示例,涉及部分进阶内容(可暂时不要求掌握),主要目的让同学们直观感受进度条的动态效果。
我们创建了一个水平的进度条和一个按钮,这个按钮控制进度条的开始和停止。

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()


    def initUI(self):      
        self.pbar = QProgressBar(self)  # 创建一个水平的进度条
        self.pbar.setGeometry(30, 40, 200, 25)  # 指定大小和位置

        self.btn = QPushButton('Start', self)  # 创建一个开始按钮
        self.btn.move(40, 80)  # 移动位置
        # 一旦触发了QPushButton 控件的点击事件,则会自动调用doAction函数
        self.btn.clicked.connect(self.doAction)  # 点击按钮时关联槽函数doAction

        self.timer = QBasicTimer()  # 创建一个定时器对象
        self.step = 0  # 初始步数值设为0

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QProgressBar')
        self.show()


    def timerEvent(self, e):
        """每个QObject对象或其子对象都有一个QObject.timerEvent方法。在本实例中,
        为了响应定时器的超时事件,我们需要使用下面的代码重写进度条的timerEvent方法。"""
        if self.step >= 100:   
            self.timer.stop()  # 步长值超过100就停止
            self.btn.setText('Finished')  # 按钮显示已完成
            return

        self.step +=  1  # 更新步长,每次+1
        self.pbar.setValue(self.step)  # 让进度条显示步长数值


    def doAction(self):
        """用来控制开始和停止。"""
        if self.timer.isActive():
            self.timer.stop()
            self.btn.setText('Start')  # 按钮显示开始
        else:
            self.timer.start(100, self)  # 调用start()方法启动定时器。这个方法有两个参数:过期时间和事件接收者。
            self.btn.setText('Stop')  # 按钮显示停止

将这部分代码,复制到第一节PyQt5代码框架替换class Example即可。
拓展练习:运行上述程序,点击开始按钮,观察进度条的变化。

小结 #

  • 学习了如何创建QSlider控件。
  • 学习了如何创建QProgressBar控件。
  • 习题 #

    1. 习题1:尝试在创建QSlider时,第一个参数改为Qt.Vertical,运行程序观察滑块会有什么变化。
    2. 习题2:尝试将QProgressBar代码中的self.step += 1改为self.step += 10,运行程序观察进度条的变化。