以下是详细讲解python PyQt5中进度条的渐变色条的完整使用攻略。
概述
PyQt5提供了进度条的类QProgressBar
,但默认的进度条只有一种简单颜色。如果需要美化进度条,可以通过使用渐变色条来实现。
渐变色条的实现
实现渐变色条的基本思路是通过自定义样式表,使进度条的背景变成渐变色条。
步骤
以下是实现渐变色条的具体步骤:
- 创建一个
QProgressBar
对象
progress_bar = QProgressBar()
- 定义渐变色条颜色样式
gradient = QLinearGradient(0, 0, 100, 100) # 定义渐变的方向和起止位置
gradient.setColorAt(0.0, QColor(255, 0, 0)) # 起始颜色
gradient.setColorAt(0.5, QColor(255, 255, 0)) # 中间颜色
gradient.setColorAt(1.0, QColor(0, 255, 0)) # 结束颜色
- 定义样式表
style_sheet = "QProgressBar{border: 2px solid grey;border-radius: 5px;background-color: #eeeeee;text-align: center;} QProgressBar::chunk{background: QBrush($gradient); width: 20px;margin: 0.5px;}"
其中,QProgressBar::chunk
是用于自定义进度条chunk的样式类,QBrush($gradient)
用于设置chunk的渐变色。
- 设置样式表
progress_bar.setStyleSheet(style_sheet)
完成以上步骤之后,即可得到一个渐变色条。
示例1
以下是一个示例,展示了如何使用渐变色条来设置进度条的样式:
import sys
from PyQt5.QtGui import QColor, QLinearGradient, QBrush
from PyQt5.QtWidgets import QApplication, QWidget, QProgressBar, QVBoxLayout
class GradientProgressBar(QProgressBar):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
gradient = QLinearGradient(0, 0, 100, 100)
gradient.setColorAt(0.0, QColor(255, 0, 0))
gradient.setColorAt(0.5, QColor(255, 255, 0))
gradient.setColorAt(1.0, QColor(0, 255, 0))
style_sheet = "QProgressBar{border: 2px solid grey;border-radius: 5px;background-color: #eeeeee;text-align: center;} QProgressBar::chunk{background: QBrush($gradient); width: 20px;margin: 0.5px;}"
self.setStyleSheet(style_sheet.replace('$gradient', 'gradient'))
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
progress_bar = GradientProgressBar()
progress_bar.setValue(50)
layout.addWidget(progress_bar)
self.setLayout(layout)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Progress Bar')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
example = Example()
sys.exit(app.exec_())
运行以上代码,即可得到一个带渐变色条的进度条。
示例2
以下是一个示例,展示了如何使用QThread和QTimer来模拟后台工作,并使用渐变色条来显示任务进度:
from PyQt5.QtGui import QColor, QLinearGradient, QBrush
from PyQt5.QtCore import QThread, pyqtSignal, QTimer
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar
class GradientProgressBar(QProgressBar):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
gradient = QLinearGradient(0, 0, 100, 100)
gradient.setColorAt(0.0, QColor(255, 0, 0))
gradient.setColorAt(0.5, QColor(255, 255, 0))
gradient.setColorAt(1.0, QColor(0, 255, 0))
style_sheet = "QProgressBar{border: 2px solid grey;border-radius: 5px;background-color: #eeeeee;text-align: center;} QProgressBar::chunk{background: QBrush($gradient); width: 20px;margin: 0.5px;}"
self.setStyleSheet(style_sheet.replace('$gradient', 'gradient'))
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.progress_bar = GradientProgressBar()
layout.addWidget(self.progress_bar)
self.setLayout(layout)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Progress Bar')
self.task_thread = TaskThread()
self.task_thread.task_progress_update.connect(self.update_progress_bar)
self.task_thread.start()
self.timer = QTimer()
self.timer.timeout.connect(self.show_result)
self.timer.start(0)
self.show()
def update_progress_bar(self, progress):
self.progress_bar.setValue(progress)
def show_result(self):
if not self.task_thread.isRunning():
self.timer.stop()
result = self.task_thread.task_result
print(f'Task Result: {result}')
QApplication.quit()
class TaskThread(QThread):
task_progress_update = pyqtSignal(int)
def __init__(self, parent=None, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.task_result = None
def run(self):
progress = 0
while progress < 100:
self.task_progress_update.emit(progress)
progress += 1
self.msleep(100)
self.task_result = 'Task Completed'
if __name__ == '__main__':
app = QApplication([])
example = Example()
sys.exit(app.exec_())
运行以上代码,即可得到一个带渐变色条的进度条,并且进度条会模拟后台任务的进度。在任务完成后,会输出结果并退出程序。
结论
通过自定义样式表,可以轻松地为PyQt5的进度条添加渐变色条,进一步美化界面。同时,我们还演示了如何使用QThread和QTimer来模拟后台任务,并使用渐变色条展示任务进度。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – 进度条的渐变色条 - Python技术站