4.3.2进度条:QProgressBar
进度条属于QProgressBar类,通常在执行长时间任务时显示当前的进展情况。ProgressBar类的常用方法如下:
setMinimum():设置进度条的最小值,默认值为0
setMaximum():设置进度条的最大值,默认值为99
setRange():设置进度条的取值范围。 相当于setMinimum()和setMaximum()方法的结合
setValue():设置进度条的当前值
setFormat():设置进度条的文字显示格式:
%p%:显示完成的百分比,默认格式
%v:显示当前的进度值
%m:显示总的步长值
setAlignment():设置对齐方式,有水平和垂直两种。
setLayoutDirection():设置进度条的布局方向(Qt.x):
LeftToRight:从左至右
RightToLeft:从右至左
LayoutDirectionAuto:跟随布局方向自动调整
setOrientation():设置进度条的显示方向(Qt.x):
Horizontal:水平方向
Vertical:垂直方向
setInvertedAppearance():设置进度条是否以反方向显示进度
setTextDirection():设置进度条的文本显示方向(QProgressBar.x):
TopToBottom:从上到下
BottomToTop:从下到上
setProperty():对进度条的属性进行设置,可以是任何属性
minimum():获取进度条的最小值
maximum():获取进度条的最大值
value():获取进度条的当前值
【例4.16】QprogressBar进度条测试,如下:
import sys # 导入Python的系统模块,用于处理与Python解释器交互或访问由解释器使用或维护的变量和与解释器强烈交互的功能。
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, \
QProgressBar # 从PyQt6.QtWidgets模块中导入需要的类,用于创建应用程序、窗口部件、按钮和进度条。
from PyQt6.QtCore import QBasicTimer # 从PyQt6.QtCore模块中导入QBasicTimer类,用于处理计时器事件。
class myWidget(QWidget): # 定义一个名为myWidget的类,继承自QWidget,作为应用程序的主窗口部件。
def __init__(self):
super().__init__() # 调用父类QWidget的构造函数,进行初始化。
self.initUI() # 调用initUI方法,用于初始化用户界面。
def initUI(self):
self.resize(300, 200) # 设置窗口的大小为300x200像素。
self.pvalue = 0 # 初始化进度条的进度值为0。
self.timer1 = QBasicTimer() # 创建一个QBasicTimer对象,用于处理计时器事件。
# 创建进度条对象
self.pgb = QProgressBar(self) # 创建一个QProgressBar对象,并设置其父部件为当前窗口部件。
self.pgb.move(50, 50) # 设置进度条在窗口中的位置。
self.pgb.resize(250, 20) # 设置进度条的大小为250x20像素。
# 设置进度条的范围
self.pgb.setMinimum(0) # 设置进度条的最小值为0。
self.pgb.setMaximum(100) # 设置进度条的最大值为100。
self.pgb.setValue(self.pvalue) # 设置进度条的当前值为self.pvalue(初始为0)。
self.btn = QPushButton("开始", self) # 创建一个QPushButton对象,设置其文本为“开始”,并设置其父部件为当前窗口部件。
self.btn.move(120, 100) # 设置按钮在窗口中的位置。
self.btn.clicked.connect(self.clickedFunc) # 将按钮的点击事件与clickedFunc方法连接。
self.show() # 显示窗口部件。
def clickedFunc(self):
if self.timer1.isActive(): # 判断计时器是否正在运行。
self.timer1.stop() # 如果计时器正在运行,则停止它。
self.btn.setText("开始") # 将按钮的文本设置为“开始”。
else:
self.timer1.start(100, self) # 如果计时器没有运行,则启动它,并设置时间间隔为100毫秒,self作为接收计时器事件的部件。
self.btn.setText("停止") # 将按钮的文本设置为“停止”。
def timerEvent(self, e): # 这是一个特殊的方法,用于处理计时器事件。
if self.pvalue == 100: # 判断进度条的值是否达到100。
self.timer1.stop() # 如果达到100,则停止计时器。
else:
self.pvalue += 1 # 否则,增加进度条的值。
self.pgb.setValue(self.pvalue) # 更新进度条的显示值。
if __name__ == "__main__": # 判断当前脚本是否作为主程序运行。
app = QApplication(sys.argv) # 创建一个QApplication对象,用于管理应用程序级别的资源。
w = myWidget() # 创建一个myWidget对象,即应用程序的主窗口部件。
app.exec() # 进入应用程序的主事件循环,等待用户交互,直到应用程序关闭。
这段代码实现了一个简单的图形用户界面(GUI)程序,其中包含一个进度条(QProgressBar)和一个按钮(QPushButton)。通过点击按钮,用户可以开始或停止进度条的递增。
使用的布局和控件:
-
没有使用布局:代码中并没有显式使用任何布局管理器,而是直接通过
move
和resize
方法手动定位和调整控件的大小和位置。 -
控件:
QWidget
:作为主窗口的基类。QPushButton
:一个按钮控件,用于开始和停止进度条的递增。QProgressBar
:一个进度条控件,用于显示进度。
关键语句:
-
self.timer1 = QBasicTimer()
:创建一个基本的定时器对象,用于定期触发进度条的更新。 -
self.btn.clicked.connect(self.clickedFunc)
:将按钮的clicked
信号连接到clickedFunc
槽函数,当用户点击按钮时,clickedFunc
函数将被调用。 -
self.timer1.start(100, self)
和self.timer1.stop()
:分别用于启动和停止定时器。定时器的间隔设置为100毫秒,即每100毫秒触发一次timerEvent
事件。 -
self.timerEvent(self, e)
:这是QObject
的一个事件处理函数,当定时器触发时,这个函数会被调用。在这里,它用于更新进度条的值。 -
self.pvalue += 1
和self.pgb.setValue(self.pvalue)
:在timerEvent
中,每次调用都会增加pvalue
的值,并设置给进度条,从而更新进度条的显示。 -
if self.pvalue == 100: self.timer1.stop()
:当进度条的值达到100时,停止定时器,防止进度条继续递增。 -
self.btn.setText("开始")
和self.btn.setText("停止")
:根据定时器的状态(是否激活),改变按钮的文本,以指示当前的操作是开始还是停止进度条的递增。
总体来说,这段代码创建了一个简单的GUI窗口,包含一个进度条和一个按钮。通过点击按钮,用户可以控制进度条的递增,当进度条达到100%时,递增停止。