Python GUI中基于Canvas实现美观的实时进度条

夏知夏
夏知夏
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍如何在Python GUI开发中,利用Tkinter的Canvas组件替代默认的粗糙进度条,实现视觉更美观、功能更完善的实时进度显示。通过结合多线程与Canvas绘图,解决了传统进度条在图形界面中显示效果不佳的问题,提供了完整的代码示例与布局方案。

在开发Python图形用户界面(GUI)应用程序时,通常需要实时展示下载或处理任务的进度。尽管网络上存在大量相关教程,但许多示例最终呈现的效果往往不尽如人意,类似于常见的默认样式。

这种默认样式的进度条在命令行(CMD)环境中或许尚可接受,但嵌入到完整的图形界面时,其视觉效果显得较为粗糙且不够美观。为此,笔者利用Tkinter中的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('Progress Bar')
top.geometry('800x500+290+100')
top.resizable(False, False)
top.config(bg='#535353')
 
# 进度条
sum_length = 630
canvas_progress_bar = Canvas(top, width=sum_length, height=20)
canvas_shape = canvas_progress_bar.create_rectangle(0, 0, 0, 25, fill='green')
canvas_text = canvas_progress_bar.create_text(292, 4, anchor=NW)
canvas_progress_bar.itemconfig(canvas_text, text='00:00:00')
var_progress_bar_percent = StringVar()
var_progress_bar_percent.set('00.00 %')
label_progress_bar_percent = Label(top, textvariable=var_progress_bar_percent, fg='#F5F5F5', bg='#535353')
canvas_progress_bar.place(relx=0.45, rely=0.4, anchor=CENTER)
label_progress_bar_percent.place(relx=0.89, rely=0.4, anchor=CENTER)
# 按钮
button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=run, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
button_start.place(relx=0.45, rely=0.5, anchor=CENTER)
 
top.mainloop()

以下是该自定义进度条的实际运行效果展示。

以上关于Python GUI中利用Canvas实现美观进度条的示例详解即为全部内容,希望能为读者提供有益的参考。欢迎对本文内容提出建议,并支持本站获取更多技术分享。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表