如何深入理解并灵活运用tkinter库中的Progressbar进度条组件的高级用法?

2026-04-19 22:102阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1387个文字,预计阅读时间需要6分钟。

如何深入理解并灵活运用tkinter库中的Progressbar进度条组件的高级用法?

目录 + Progressbar + 基本概念 + 基本应用 + Progressbar + 动画设计 + Progressbar + 方法:start() / step() / stop() + indeterminate 模式 + 总结Progressbar + 基本概念Progressbar 可以理解为进度条,主要用于显示任务的完成情况。它是当进行耗时操作时,让用户了解当前进度的一种有效方式。

目录
  • Progressbar 基本概念
  • 基本应用
  • Progressbar 动画设计
  • Progressbar 的方法 start()/step()/stop()
  • indeterminate 模式
  • 总结

Progressbar 基本概念

Progressbar 可以解释为进度条,主要是当做一个工作进度的指针,在这个控件中会有一个指针,由此指针可以了解工作进度

构造方法如下:

Progressbar(父对象, options, ...)

参数:

  • 第一个参数:父对象,表示这个进度条将建立在哪一个窗口内
  • 第二个参数:options,参数如下
参数含义length进度条的长度默认是100像素mode可以有两种模式,下面作介绍maximum进度条的最大值默认是100像素name进度条的名称,供程序参考引用orient进度条的方向,可以是HORIZONTAL(默认) 或者是 VERTICALvalue进度条的目前值variable记录进度条目前的进度值

mode参数

  • determinate:一个指针会从起点移至终点,通常当我们知道所需工作时间时,可以使用此模式,这是默认模式
  • indeterminate:一个指针会在起点和终点间来回移动,通常当我们不知道工作所需时间时,可以使用此模式 Progressbar

基本应用

例子:

import tkinter import tkinter.ttk root = tkinter.Tk() root.geometry('150x120') progressbarOne = tkinter.ttk.Progressbar(root) progressbarOne.pack(pady=20) # 进度值最大值 progressbarOne['maximum'] = 100 # 进度值初始值 progressbarOne['value'] = 20 # 横排 长度200 起点移至终点 progressbarTwo = tkinter.ttk.Progressbar(root, orient=tkinter.HORIZONTAL, length=200, mode='determinate') progressbarTwo.pack(pady=20) # 进度值最大值 progressbarTwo['maximum'] = 100 # 进度值初始值 progressbarTwo['value'] = 80 root.mainloop()

运行结果:

注意:现在进度条还不能动!

Progressbar 动画设计

如果想要设计含动画效果的Progressbar,可以在每次更新Progressbar 对象的value值时调用update()方法,这时窗口可以依据value值重绘,这样就可以达到动画效果

例子:

import time import tkinter import tkinter.ttk def show(): for i in range(100): # 每次更新加1 progressbarOne['value'] = i + 1 # 更新画面 root.update() time.sleep(0.05) root = tkinter.Tk() root.geometry('150x120') progressbarOne = tkinter.ttk.Progressbar(root) progressbarOne.pack(pady=20) # 进度值最大值 progressbarOne['maximum'] = 100 # 进度值初始值 progressbarOne['value'] = 0 button = tkinter.Button(root, text='Running', command=show) button.pack(pady=5) root.mainloop()

运行结果:

例子:

模拟真实下载,下载总量是10000B, 每次下载500B

def show(): # 设置进度条的目前值 progressbarOne['value'] = 0 # 设置进度条的最大值 progressbarOne['maximum'] = maxbyte # 调用loading方法 loading() def loading(): # 改变变量属性 global byte # 每次运行500B byte += 500 # 设置指针 progressbarOne['value'] = byte if byte < maxbyte: # 经过100ms后再次调用loading方法 progressbarOne.after(100, loading) root = tkinter.Tk() root.geometry('150x120') # 设置下载初值 byte = 0 # 设置下载最大值 maxbyte = 10000 progressbarOne = tkinter.ttk.Progressbar(root) progressbarOne.pack(pady=20) button = tkinter.Button(root, text='Running', command=show) button.pack(pady=5) root.mainloop()

运行结果:

Progressbar 的方法 start()/step()/stop()

含义如下:

  • start(interval):每隔interval时间移动一次指针。interval的默认值是50ms,每次移动指针调用一次step(amount)。在step()方法内的amount参数意义就是增值量
  • step(amount):每次增加一次amount,默认值是1.0,在determinate模式下,指针不会超过maximum参数。在indeterminate模式下,当指针达到maximum参数值的前一格时,指针会回到起点
  • stop():停止start()运行

例子:

import time import tkinter import tkinter.ttk def show(): while progressbarOne.cget('value') <= progressbarOne['maximum']: progressbarOne.step(2) root.update() print(progressbarOne.cget('value')) time.sleep(0.05) root = tkinter.Tk() root.geometry('150x120') progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='determinate', orient=tkinter.HORIZONTAL) progressbarOne.pack(pady=20) progressbarOne['maximum'] = 100 progressbarOne['value'] = 0 button = tkinter.Button(root, text='Running', command=show) button.pack(pady=5) root.mainloop()

运行结果:

使用start()方法启动动画,单击stop按钮停止

例子:

import tkinter import tkinter.ttk def run(): progressbarOne.start() def stop(): progressbarOne.stop() root = tkinter.Tk() root.geometry('150x120') progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='determinate', orient=tkinter.HORIZONTAL) progressbarOne.pack(padx=5, pady=10) progressbarOne['maximum'] = 100 progressbarOne['value'] = 0 buttonRun = tkinter.Button(root, text='Run', width=6, command=run) buttonRun.pack(padx=10, pady=5, side=tkinter.LEFT) buttonStop = tkinter.Button(root, text='Stop', width=6, command=stop) buttonStop.pack(padx=10, pady=5, side=tkinter.RIGHT) root.mainloop()

运行结果:

如何深入理解并灵活运用tkinter库中的Progressbar进度条组件的高级用法?

indeterminate 模式

在这个模式下指针将左右移动,主要目的是让用户知道程序仍然在继续工作

例子:

progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='indeterminate', orient=tkinter.HORIZONTAL)

运行结果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

本文共计1387个文字,预计阅读时间需要6分钟。

如何深入理解并灵活运用tkinter库中的Progressbar进度条组件的高级用法?

目录 + Progressbar + 基本概念 + 基本应用 + Progressbar + 动画设计 + Progressbar + 方法:start() / step() / stop() + indeterminate 模式 + 总结Progressbar + 基本概念Progressbar 可以理解为进度条,主要用于显示任务的完成情况。它是当进行耗时操作时,让用户了解当前进度的一种有效方式。

目录
  • Progressbar 基本概念
  • 基本应用
  • Progressbar 动画设计
  • Progressbar 的方法 start()/step()/stop()
  • indeterminate 模式
  • 总结

Progressbar 基本概念

Progressbar 可以解释为进度条,主要是当做一个工作进度的指针,在这个控件中会有一个指针,由此指针可以了解工作进度

构造方法如下:

Progressbar(父对象, options, ...)

参数:

  • 第一个参数:父对象,表示这个进度条将建立在哪一个窗口内
  • 第二个参数:options,参数如下
参数含义length进度条的长度默认是100像素mode可以有两种模式,下面作介绍maximum进度条的最大值默认是100像素name进度条的名称,供程序参考引用orient进度条的方向,可以是HORIZONTAL(默认) 或者是 VERTICALvalue进度条的目前值variable记录进度条目前的进度值

mode参数

  • determinate:一个指针会从起点移至终点,通常当我们知道所需工作时间时,可以使用此模式,这是默认模式
  • indeterminate:一个指针会在起点和终点间来回移动,通常当我们不知道工作所需时间时,可以使用此模式 Progressbar

基本应用

例子:

import tkinter import tkinter.ttk root = tkinter.Tk() root.geometry('150x120') progressbarOne = tkinter.ttk.Progressbar(root) progressbarOne.pack(pady=20) # 进度值最大值 progressbarOne['maximum'] = 100 # 进度值初始值 progressbarOne['value'] = 20 # 横排 长度200 起点移至终点 progressbarTwo = tkinter.ttk.Progressbar(root, orient=tkinter.HORIZONTAL, length=200, mode='determinate') progressbarTwo.pack(pady=20) # 进度值最大值 progressbarTwo['maximum'] = 100 # 进度值初始值 progressbarTwo['value'] = 80 root.mainloop()

运行结果:

注意:现在进度条还不能动!

Progressbar 动画设计

如果想要设计含动画效果的Progressbar,可以在每次更新Progressbar 对象的value值时调用update()方法,这时窗口可以依据value值重绘,这样就可以达到动画效果

例子:

import time import tkinter import tkinter.ttk def show(): for i in range(100): # 每次更新加1 progressbarOne['value'] = i + 1 # 更新画面 root.update() time.sleep(0.05) root = tkinter.Tk() root.geometry('150x120') progressbarOne = tkinter.ttk.Progressbar(root) progressbarOne.pack(pady=20) # 进度值最大值 progressbarOne['maximum'] = 100 # 进度值初始值 progressbarOne['value'] = 0 button = tkinter.Button(root, text='Running', command=show) button.pack(pady=5) root.mainloop()

运行结果:

例子:

模拟真实下载,下载总量是10000B, 每次下载500B

def show(): # 设置进度条的目前值 progressbarOne['value'] = 0 # 设置进度条的最大值 progressbarOne['maximum'] = maxbyte # 调用loading方法 loading() def loading(): # 改变变量属性 global byte # 每次运行500B byte += 500 # 设置指针 progressbarOne['value'] = byte if byte < maxbyte: # 经过100ms后再次调用loading方法 progressbarOne.after(100, loading) root = tkinter.Tk() root.geometry('150x120') # 设置下载初值 byte = 0 # 设置下载最大值 maxbyte = 10000 progressbarOne = tkinter.ttk.Progressbar(root) progressbarOne.pack(pady=20) button = tkinter.Button(root, text='Running', command=show) button.pack(pady=5) root.mainloop()

运行结果:

Progressbar 的方法 start()/step()/stop()

含义如下:

  • start(interval):每隔interval时间移动一次指针。interval的默认值是50ms,每次移动指针调用一次step(amount)。在step()方法内的amount参数意义就是增值量
  • step(amount):每次增加一次amount,默认值是1.0,在determinate模式下,指针不会超过maximum参数。在indeterminate模式下,当指针达到maximum参数值的前一格时,指针会回到起点
  • stop():停止start()运行

例子:

import time import tkinter import tkinter.ttk def show(): while progressbarOne.cget('value') <= progressbarOne['maximum']: progressbarOne.step(2) root.update() print(progressbarOne.cget('value')) time.sleep(0.05) root = tkinter.Tk() root.geometry('150x120') progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='determinate', orient=tkinter.HORIZONTAL) progressbarOne.pack(pady=20) progressbarOne['maximum'] = 100 progressbarOne['value'] = 0 button = tkinter.Button(root, text='Running', command=show) button.pack(pady=5) root.mainloop()

运行结果:

使用start()方法启动动画,单击stop按钮停止

例子:

import tkinter import tkinter.ttk def run(): progressbarOne.start() def stop(): progressbarOne.stop() root = tkinter.Tk() root.geometry('150x120') progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='determinate', orient=tkinter.HORIZONTAL) progressbarOne.pack(padx=5, pady=10) progressbarOne['maximum'] = 100 progressbarOne['value'] = 0 buttonRun = tkinter.Button(root, text='Run', width=6, command=run) buttonRun.pack(padx=10, pady=5, side=tkinter.LEFT) buttonStop = tkinter.Button(root, text='Stop', width=6, command=stop) buttonStop.pack(padx=10, pady=5, side=tkinter.RIGHT) root.mainloop()

运行结果:

如何深入理解并灵活运用tkinter库中的Progressbar进度条组件的高级用法?

indeterminate 模式

在这个模式下指针将左右移动,主要目的是让用户知道程序仍然在继续工作

例子:

progressbarOne = tkinter.ttk.Progressbar(root, length=200, mode='indeterminate', orient=tkinter.HORIZONTAL)

运行结果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。