首页 > 编程语言 >【Python GUI 编程】tkinter:Ttk 进度条 Progressbar

【Python GUI 编程】tkinter:Ttk 进度条 Progressbar

时间:2024-12-24 11:23:35浏览次数:9  
标签:tkinter 进度条 Python button ttk start tk root

在本文中,将介绍 Tkinter Progressbar 进度条小部件。Progressbar 进度条小部件向用户提供长时间运行任务时的进度反馈。

要创建 Progressbar 进度条小部件,请使用以下构造函数:

ttk.Progressbar(container, orient, length, mode)

主要参数如下:

进度条模式

determinate 模式:

进度条会从起点延伸至终点,当知道任务所需时间时,可以使用此模式,这是默认确定模式。

import tkinter as tk
from tkinter import ttk
import time
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Progressbar 进度条演示')
pb = ttk.Progressbar(root, length=280)
pb.pack(expand=True)
frame=ttk.Frame(root)
start_button = ttk.Button(root, text='开始', command=pb.start)
start_button.pack(side=tk.LEFT, expand=True)
stop_button = ttk.Button(root, text='结束', command=pb.stop)
stop_button.pack(side=tk.LEFT, expand=True)
frame.pack(fill=tk.X, expand=True)
root.mainloop()

indeterminate 模式:

一段进度条会在起点和终点间来回移动,当不知道任务所需时间时,可以使用此不确定模式。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Progressbar 进度条演示')
pb = ttk.Progressbar(root, orient='horizontal', mode='indeterminate', length=280)
pb.pack(expand=True)
frame=ttk.Frame(root)
start_button = ttk.Button(root, text='开始', command=pb.start)
start_button.pack(side=tk.LEFT, expand=True)
stop_button = ttk.Button(root, text='结束', command=pb.stop)
stop_button.pack(side=tk.LEFT, expand=True)
frame.pack(fill=tk.X, expand=True)
root.mainloop()

进度条的值

可以使用参数variable 结合set() 方法,或者使用参数value 设置进度条的值。使用cget() 方法获取进度条的值。

import tkinter as tk
from tkinter import ttk
import time
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Progressbar 进度条演示')
var=tk.IntVar()

def start1():
    for i in range(1, 101):
        var.set(i)
        label1['text']=str(pb1.cget('value')),'%'
        root.update() # 刷新窗口
        time.sleep(0.05)
def start2():
    for j in range(100):
        pb2['value'] = j + 1
        label2['text']=str(pb2.cget('value')),'%'
        root.update() # 刷新窗口
        time.sleep(0.05)

pb1 = ttk.Progressbar(root, orient='horizontal', length=280, variable=var)
pb1.pack(expand=True)
label1 = tk.Label(root,text='0%')
label1.pack()
pb2 = ttk.Progressbar(root, orient='horizontal', length=280)
pb2.pack(expand=True)
label2 = tk.Label(root,text='0%')
label2.pack()
frame=ttk.Frame(root)
start_button = ttk.Button(root, text='开始1', command=start1)
start_button.pack(side=tk.LEFT, expand=True)
stop_button = ttk.Button(root, text='开始2', command=start2)
stop_button.pack(side=tk.LEFT, expand=True)
frame.pack(fill=tk.X, expand=True)
root.mainloop()

进度条的样式

利用 Ttk 主题小部件的特性,自定义进度条的样式。

import tkinter as tk
from tkinter import ttk
import time
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Progressbar 进度条演示')
var=tk.IntVar()
style = ttk.Style()
style.theme_use("clam")
style.configure("design.Horizontal.TProgressbar",
                background="lightblue",
                troughcolor="lightgray",
                bordercolor="darkblue",
                lightcolor="lightblue",
                darkcolor="darkblue")
def start():
    pb2.start()
    for i in range(100):
        var.set(i)
        label1['text']=str(pb1.cget('value')) + '%'
        root.update() # 刷新窗口
        time.sleep(0.05)
pb1 = ttk.Progressbar(root, orient='horizontal', length=280, variable=var, style='design.Horizontal.TProgressbar')
pb1.pack(expand=True)
label1 = tk.Label(root,text='0%')
label1.pack()
pb2 = ttk.Progressbar(root, orient='horizontal',  mode='indeterminate', length=280, style='design.Horizontal.TProgressbar')
pb2.pack(expand=True)
label2 = tk.Label(root,text='0%')
label2.pack()
frame=ttk.Frame(root)
start_button = ttk.Button(root, text='开始', command=start)
start_button.pack(side=tk.LEFT, expand=True)
frame.pack(fill=tk.X, expand=True)
root.mainloop()

进度条的方法

start() 方法:

启动进度条的移动,设置移动的速度,以毫秒为单位。

step() 方法:

控制进度条的步长。每次调用该方法,进度条都会向前移动指定的长度,默认 1。

stop() 方法:

进度条停止,结束移动。

import tkinter as tk
from tkinter import ttk
import time
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Progressbar 进度条演示')
root.grid_anchor('center')
def startall():
    pb1.start(5)
    pb2.start(10)
    pb3.start(5)
    pb4.start(10)
    
def stepall():
    pb1.step(10)
    pb2.step(8)
    pb3.step(25)
    pb4.step(15)

def stopall():
    pb1.stop()
    pb2.stop()
    pb3.stop()
    pb4.stop()
pb1 = ttk.Progressbar(root, orient='horizontal', length=280)
pb1.grid(row=0,column=0,pady=10,padx=10)
pb2 = ttk.Progressbar(root, orient='horizontal',  mode='indeterminate', length=280)
pb2.grid(row=1,column=0,pady=10,padx=10)
pb3 = ttk.Progressbar(root, orient='vertical', length=280)
pb3.grid(row=0,column=1,pady=10,padx=10,rowspan=2)
pb4 = ttk.Progressbar(root, orient='vertical',  mode='indeterminate', length=280)
pb4.grid(row=0,column=2,pady=10,padx=10,rowspan=2)
start_button = ttk.Button(root, text='开始', command=startall)
start_button.grid(row=2,column=0,pady=10,padx=10)
start_button = ttk.Button(root, text='步进', command=stepall)
start_button.grid(row=2,column=1,pady=10,padx=10)
start_button = ttk.Button(root, text='停止', command=stopall)
start_button.grid(row=2,column=2,pady=10,padx=10)
root.mainloop()

文件下载进度示例

以下代码将下载 Python 到 C 盘。

import tkinter as tk
from tkinter import ttk
from threading import Thread
from urllib.request import urlretrieve, urlcleanup
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Progressbar 进度条演示')
root.grid_anchor('center')
def download():
    url = "https://mirrors.huaweicloud.com/python/3.13.1/python-3.13.1-amd64.exe"
    urlretrieve(url, "c:\python-3.13.1-amd64.exe", download_status)
    urlcleanup()
def download_button_clicked():
    Thread(target=download).start()
def download_status(count, data_size, total_data):
    if count == 0:
        progressbar.configure(maximum=total_data)
    else:
        progressbar.step(data_size)
        label['text']=f"{progressbar.cget('value')/total_data*100:.2f}%"
download_button = ttk.Button(text="下载 Python", command=download_button_clicked)
download_button.grid(row=0,column=0,pady=10,padx=10)
progressbar = ttk.Progressbar(root, orient='horizontal', length=280)
progressbar.grid(row=1,column=0,pady=10,padx=10)
label = ttk.Label(root,text='0%')
label.grid(row=1,column=1,pady=10,padx=10)
root.mainloop()

原创 信息技术资源 信息科技云课堂 2024年12月23日 08:25 山东

标签:tkinter,进度条,Python,button,ttk,start,tk,root
From: https://www.cnblogs.com/o-O-oO/p/18626945

相关文章

  • 【Python GUI 编程】tkinter :Ttk 小部件
    在本文中,将介绍Tkinter.ttk主题小部件,是常规Tkinter小部件的升级版本。Tkinter有两种小部件:经典小部件、主题小部件。Tkinter于1991年推出了经典小部件,2007年在Tk8.5中添加新式的主题小部件。主题小部件更新了部分经典小部件,并增加了部分新的小部件。要使用tkinter.tt......
  • 【Python GUI 编程】tkinter :Ttk 树视图 Treeview
    在本文中,将介绍TkinterTreeview树视图小部件以及如何使用它来显示表格和分层数据。Tkinter中,没有专门的表格部件,Treeview可以很好地显示表格数据,支持多列显示。要创建Treeview树视图小部件,可以使用以下构造函数:tree=ttk.Treeview(master,**options)Treeview显示表......
  • webshell-decryptor:一款使用python tkinter进行GUI开发的Webshell自动解密流量分析工
    免责声明该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。工具介绍webshell-decryptor是一款使用pythontkinter进行GUI开发的Webshell自动解密流量分析工具,可通过获取到的webshell......
  • Python TypeError: list和list之间不支持减法操作
    在本文中,我们将介绍Python中的TypeError错误,特别是在进行列表相减时出现的TypeError:unsupportedoperandtype(s)for-:‘list’and‘list’错误。我们将深入探讨这个错误的原因,并提供一些解决这个错误的方法。 了解TypeError错误TypeError是Python中常见的错误类型之一......
  • python 个人微信自动回复(Windows GUI自动化)
    #根据预定的csv数据自动回复importtimeimportnumpyasnpimportpandasaspd#匹配回复数据fromuiautomationimportWindowControl#用于WindowsGUI自动化target_name="老婆"defwxListent():#通过pd读取数据df=pd.read_csv('回复数据.csv',en......
  • 【重要】python所有关键字示例
    以下是一个按照要求整理的表格,包含了Python关键字的序号、关键字、用途以及示例:序号关键字用途示例1False布尔值,表示假ifnotcondition:print("ConditionisFalse")2None空值,表示无result=None3True布尔值,表示真ifcondition:print("Conditioni......
  • python代码在生产环境部署有必要打包.so文件吗?(python打包so、python so)共享对象文件
    文章目录1.性能优化优点:-加速执行-减少解释开销缺点:-有限的性能提升-优化复杂度2.代码保护优点:-防止源码泄露缺点:-并非完全安全-增加部署复杂度3.部署和依赖管理优点:-打包依赖-跨平台支持缺点:-平台依赖性-维护成本4.替代方案-Cython-PyInstall......
  • Python入门:3.Python的输入和输出格式化
    引言在Python编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨Python的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。一、输入操作Python......
  • Python基于微信小程序的学习平台
    收藏关注不迷路!!......
  • python基础
    1.数据类型整形,浮点型,字符串整型-2,-1,0,1,2,3,4,5浮点型-1.25,-1.0,--0.5,0.0,0.5,1.0,1.25字符串'a','aa','aaa','Hello!','11cats'2.字符串的连接和复制+可以连接字符串*可以复制字符串3变量变量赋值a=3变量命名:1.只能是一个词。2.只能包......