当前位置:   article > 正文

python tkinter 一种牛叉实用的进度条运用方法_tk进度条

tk进度条

        网上有很多文章介绍进度条Progressbar的基本概念及功能,故这里不再赘述。本文给大家分享一种牛叉实用的进度条运用方法。

        首先,我们把进度条封装为一个类,里面包含了两种方法,分别是__init__ 和value。__init__ 函数里定义了进度条的样式,类型,位置等基本信息,value函数定义了进度条走动的具体数值。

例子:

  1. class ProcessBar():
  2. def __init__(self):
  3. self.process = ttk.Progressbar(root, length=200, mode="determinate",maximum=100,orient=tk.HORIZONTAL)
  4. self.process.place(x=100, y=10)
  5. def value(self, per):
  6. self.process["value"] = per
  7. root.update() # root 窗口实时更新

后面在程序主体想进度条走动时,直接调用value方法,并传入合适的数值,即可达到目的。

 例:

  1. def start():
  2. count = 10000
  3. for i in range(count):
  4. processbar.value(100*i/count) # 直接调用value方法

        但这样会引入一个问题,如果进度条写在循环体中,想实时、精确地更新进度条,会极大影响程序的运算速度(实测可降低50%的运算效率)。关于这一点,好像很多文章并未提及。

        我们可以优化下代码,增加一个求余的判断,比如总计循环一万次,通过合理设置余数后,可以降低到每一千次或一百次再更新进度条,这样可以灵活控制更新频率,在UI显示效果和运算效率两者之间寻求平衡点。建议每5~10%更新一次,即总循环次数的5~10%作为求余运算的被除数。

例:

  1. def start():
  2. count = 10000
  3. for i in range(count):
  4. if i % 1000 == 0: # 降低更新频率,取总循环次数的10%作为求余运算的被除数
  5. processbar.value(100*i/count)
  6. processbar.value(100)

整体代码如下:

  1. import tkinter as tk
  2. from tkinter import ttk
  3. class ProcessBar():
  4. def __init__(self):
  5. self.process = ttk.Progressbar(root, length=200, mode="determinate",maximum=100,orient=tk.HORIZONTAL)
  6. self.process.place(x=100, y=10)
  7. def value(self, per):
  8. self.process["value"] = per
  9. root.update()
  10. def start():
  11. count = 10000
  12. for i in range(count):
  13. if i % 1000 == 0: # 降低更新频率
  14. processbar.value(100*i/count)
  15. processbar.value(100)
  16. if __name__ == '__main__':
  17. root = tk.Tk()
  18. root.geometry('320x240')
  19. ttk.Button(root,text="开始",command=start,width=10).place(x=10,y=10)
  20. processbar = ProcessBar()
  21. root.mainloop()

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号