下面是Python的“PyQt5 – 试管式进度条”使用攻略。
简介
PyQt5是Python的GUI工具包,以Qt实现,支持多平台。试管式进度条是一种优雅的UI设计,它通过管道中液体的变化来展示进度。这种进度条在用户感官上有极佳的体验感。PyQt5可以轻松实现试管式进度条的效果。
实现方法
在PyQt5中,试管式进度条的实现方法基于QProgressBar,主要需要进行如下操作:
-
设置QProgressBar的样式为QStyleFactory.create(),该方法会根据当前系统环境决定样式。而PyQt5中的QProxyStyle则是QStyle的一个代理类,可以让QStyle中许多细节变得方便易用,例如带背景图片的进度条和试管式进度条等;
-
启用QProgressBar的动画模式,使进度条呈现出流动液体的效果。这里采用setValue()方法周期性的更新QProgressBar的进度值来制造出液体移动的效果;
-
通过CSS中的QProgressBar::chunk属性对进度条的样式进行自定义,包括填充颜色、背景颜色等。
示例说明
下面将通过两个示例来演示PyQt5中如何实现试管式进度条。
示例1
该示例中,我们将创建一个主窗口,包含两个分别代表98%和50%的进度条。
from PyQt5.Qt import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(200, 200, 400, 300)
self.initUI()
def initUI(self):
# 创建QProgressBar
self.progress_bar1 = QProgressBar(self)
self.progress_bar1.setGeometry(60, 60, 200, 37)
self.progress_bar1.setRange(0, 100)
self.progress_bar1.setStyleSheet('QProgressBar{border: 2px solid grey; border-radius: 10px; color: black;} QProgressBar::chunk{background-color: forestgreen;}')
# 设置QProgressBar的样式为试管样式
self.progress_bar1.setStyle(QProxyStyle())
# 设置QProgressBar的动画效果
self.timer1 = QTimer(self)
self.timer1.timeout.connect(self.move_progress_bar1)
self.timer1.start(100)
# 创建QProgressBar
self.progress_bar2 = QProgressBar(self)
self.progress_bar2.setGeometry(60, 140, 200, 37)
self.progress_bar2.setRange(0, 100)
self.progress_bar2.setStyleSheet('QProgressBar{border: 2px solid grey; border-radius: 10px; color: black;} QProgressBar::chunk{background-color: darkorange;}')
# 设置QProgressBar的样式为试管样式
self.progress_bar2.setStyle(QProxyStyle())
# 设置QProgressBar的动画效果
self.timer2 = QTimer(self)
self.timer2.timeout.connect(self.move_progress_bar2)
self.timer2.start(100)
# 移动QProgressBar1的进度
def move_progress_bar1(self):
value = self.progress_bar1.value() + 1
if value > 98:
value = 0
self.progress_bar1.setValue(value)
# 移动QProgressBar2的进度
def move_progress_bar2(self):
value = self.progress_bar2.value() + 1
if value > 50:
value = 0
self.progress_bar2.setValue(value)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
在上述代码中,我们通过setStyleSheet()方法自定义了两个进度条的颜色,实现了试管的颜色效果。值得一提的是,我们通过setStyle()方法将进度条的样式设置为了试管样式,这时进度条的外观就会变成试管的形状。我们通过启动两个计时器周期性地调用move_progress_bar1()和move_progress_bar2()方法来移动两个进度条的进度。
示例2
该示例中,我们将创建一个进度条对话框并实现动态展示的效果。
from PyQt5.Qt import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ProgressDialog(QProgressDialog):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建QProgressBar
self.progress_bar1 = QProgressBar(self)
self.progress_bar1.setGeometry(50, 40, 200, 37)
self.progress_bar1.setRange(0, 100)
self.progress_bar1.setStyleSheet('QProgressBar{border: 2px solid grey; border-radius: 10px; color: black;} QProgressBar::chunk{background-color: dodgerblue;}')
# 设置QProgressBar的样式为试管样式
self.progress_bar1.setStyle(QProxyStyle())
# 设置对话框标题和样式
self.setWindowTitle('Example')
self.setWindowFlag(Qt.FramelessWindowHint)
self.setStyleSheet('QProgressDialog{background-color: white; border: 2px solid grey;}')
# 设置QProgressDialog的值
self.timer = QTimer(self)
self.timer.timeout.connect(self.move_progress_bar)
self.timer.start(100)
# 移动进度条的进度
def move_progress_bar(self):
value = self.progress_bar1.value() + 1
if value > 100:
self.close()
else:
self.progress_bar1.setValue(value)
if __name__ == '__main__':
app = QApplication([])
dialog = ProgressDialog()
dialog.exec_()
在上述代码中我们创建了一个ProgressDialog类,它继承自QProgressDialog类。通过setWindowFlags()方法设置QProgressDialog的样式为无边框,然后通过setStyleSheet()方法为其设置白色背景和灰色的边框。我们同样通过setStyle()方法将QProgressBar的样式设置为了试管样式,之后调用计时器周期性调用move_progress_bar()方法来移动进度条的进度,从而实现了动态展示效果。
以上就是PyQt5中如何实现试管式进度条的完整攻略了。