python GUI实现完美进度条

在Python GUI应用中,为了展示更美观的下载进度,作者利用Tkinter的Canvas组件重新设计了一个进度条,提供了优于传统进度条的视觉效果。

在用python做一个GUI界面时,想搞一个进度条实时显示下载进度,但查阅很多博客,最后的显示效果都类似下面这种:

这种效果在CMD界面看着还可以,但放到图形界面时就有点丑了,所以我用Canvas重新做了一个进度条,完美满足了我的要求,看着也比较舒服。

import time
import threading
from tkinter import *


def update_progress_bar():
	for percent in range(1, 101):
		hour = int(percent/3600)
		minute = int(percent/60) - hour*60
		second = percent % 60
		green_length = int(sum_length * percent / 100)
		canvas_progress_bar.coords(canvas_shape, (0, 0, green_length, 25))
		canvas_progress_bar.itemconfig(canvas_text, text='%02d:%02d:%02d' % (hour, minute, second))
		var_progress_bar_percent.set('%0.2f  %%' % percent)
		time.sleep(1)


def run():
	th = threading.Thread(target=update_progress_bar)
	th.setDaemon(True)
	th.start()


top = Tk()
top.title
<think>我们被要求生成一个关于PythonGUI实现精美进度条的示例代码,并且要参考给定的引用内容。引用[1]提到了tqdm库和GUI界面的进度条,引用[3]提到了PySimpleGUI实现实时进度条,引用[4]提到了使用Qt和qtawesome来美化界面。因此,我们可以考虑使用PySimpleGUI或PyQt(或PySide)来创建GUI进度条,并结合一些美化技巧。由于用户要求“精美”,我们可以考虑使用以下两种方式之一:1.使用PySimpleGUI,因为它简单易用,且引用[3]中提供了使用PySimpleGUI的one_line_progress_meter的示例。2.使用PyQt/PySide,因为它可以创建更复杂和更美观的界面,并且引用[4]提到了使用qtawesome(一个图标库)来美化按钮,我们可以借鉴这个思路来美化进度条。考虑到用户可能需要一个完整的示例,我们将提供两个示例:示例1:使用PySimpleGUI创建一个简单的进度条(简单但不够精美,但可以快速实现)示例2:使用PyQt5和qtawesome创建一个更美观的进度条(更符合“精美”的要求)但注意,引用[3]中的PySimpleGUI示例已经是一个简单的进度条,而引用[4]提到了qtawesome,我们可以将其用于美化PyQt5的进度条。因此,我们决定提供一个使用PyQt5和qtawesome的进度条示例,因为这样更符合“精美”的要求。步骤:1.安装必要的库:PyQt5,qtawesome2.创建一个窗口,包含一个进度条和一个开始按钮(可以使用qtawesome设置图标)3.使用qtawesome为按钮添加图标,同时可以设置进度条的样式使其更美观。但是,请注意,引用[3]中提到了PySimpleGUI进度条,如果用户希望快速实现,也可以提供PySimpleGUI的示例。因此,我们可以提供两个示例,并说明各自的优缺点。由于问题要求“精美”,我们重点放在PyQt5的示例上,但也会简单提一下PySimpleGUI。我们将分步骤进行:一、使用PySimpleGUI实现(简单示例)二、使用PyQt5和qtawesome实现(精美示例)注意:在代码中,我们将使用qtawesome来设置按钮的图标,同时通过样式表来美化进度条。开始编写代码示例:</think>### Python GUI 精美进度条实现示例 在Python GUI实现精美的进度条有多种方法,这里提供两种常用且美观的实现方案: --- #### 方案1:使用PyQt5 + QtAwesome(推荐精美方案) ```python import sys import time from PyQt5 import QtWidgets, QtCore import qtawesome as qta class ProgressWindow(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle("精美进度条") self.setGeometry(300, 300, 400, 150) self.setStyleSheet("background-color: #2c3e50; color: #ecf0f1;") # 创建布局 layout = QtWidgets.QVBoxLayout() # 标题标签 self.label = QtWidgets.QLabel("数据处理中...") self.label.setStyleSheet("font-size: 16px; font-weight: bold;") layout.addWidget(self.label) # 进度条(带圆角和渐变效果) self.progress = QtWidgets.QProgressBar() self.progress.setStyleSheet(""" QProgressBar { height: 25px; background: #34495e; border-radius: 12px; text-align: center; font-weight: bold; } QProgressBar::chunk { background: qlineargradient( spread:pad, x1:0, y1:0.5, x2:1, y1:0.5, stop:0 #3498db, stop:1 #2ecc71 ); border-radius: 10px; } """) layout.addWidget(self.progress) # 带图标的按钮 self.btn = QtWidgets.QPushButton( qta.icon('fa5s.play', color='#2ecc71'), " 开始任务") self.btn.setStyleSheet(""" QPushButton { background: #3498db; border-radius: 15px; padding: 10px; font-size: 14px; } QPushButton:hover { background: #2980b9; } """) self.btn.clicked.connect(self.start_task) layout.addWidget(self.btn) self.setLayout(layout) def start_task(self): self.btn.setEnabled(False) self.btn.setText("处理中...") self.btn.setIcon(qta.icon('fa5s.spinner', color='#f39c12', animation=qtawesome.Spin(self.btn))) # 模拟任务进度 for i in range(101): time.sleep(0.05) # 模拟耗时操作 self.progress.setValue(i) self.label.setText(f"正在处理: {i}%") QtWidgets.QApplication.processEvents() # 更新UI self.btn.setEnabled(True) self.btn.setText("任务完成") self.btn.setIcon(qta.icon('fa5s.check', color='#2ecc71')) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) window = ProgressWindow() window.show() sys.exit(app.exec_()) ``` **效果特点**: - 渐变彩色进度条 🌈 - 圆角设计和平滑动画 - 动态旋转图标(处理中显示旋转图标) - 悬停按钮效果 - 深色主题与现代化UI --- #### 方案2:使用PySimpleGUI(简单快速方案) ```python import PySimpleGUI as sg import time sg.theme('DarkTeal9') # 使用内置精美主题 layout = [ [sg.Text('文件处理进度', font=('Arial', 14), text_color='#f0f0f0')], [sg.ProgressBar(100, size=(40, 25), key='-PROGRESS-', bar_color=('#3498db', '#2c3e50'), border_width=0, style='winnative')], [sg.Button('开始', button_color=('#ecf0f1', '#27ae60'), size=(10, 1), key='-START-', bind_return_key=True)] ] window = sg.Window('精美进度条', layout, element_justification='c') while True: event, values = window.read() if event == sg.WIN_CLOSED: break if event == '-START-': window['-START-'].update(disabled=True) for i in range(101): time.sleep(0.05) # 模拟耗时操作 window['-PROGRESS-'].update(i) window['-START-'].update(f'处理中 {i}%') window['-START-'].update('完成!', disabled=False) window.close() ``` **效果特点**: - 简洁的单行代码实现 - 预置精美主题支持 - 自定义进度条颜色 - 响应式按钮状态 --- ### 关键美化技巧 1. **颜色方案**:使用渐变效果和协调配色(如蓝绿渐变) 2. **圆角设计**:通过CSS样式实现圆角进度条 3. **动态图标**:使用QtAwesome添加动态图标(如旋转动画) 4. **主题选择**:利用预置主题快速美化界面 5. **响应式反馈**:按钮状态随进度变化(禁用/启用状态) > 两种方案都能创建精美的GUI进度条,PyQt5方案提供更高自定义度,PySimpleGUI则更快速简洁。实际选择可根据项目复杂度决定[^3][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值