tkinter 使用 Canvas 实现进度条

import time
from tkinter import Tk, ttk, StringVar, Canvas


class Frame(ttk.Frame):
    def __init__(self, master=None, **kw):
        super().__init__(master, **kw)
        self.canvas = Canvas(self, width=120, height=30, bg="white")
        self.canvas.grid(row=0, column=0)
        #进度条以及完成程度
        self.out_rec = self.canvas.create_rectangle(5, 5, 105, 25)
        self.fill_rec = self.canvas.create_rectangle(5, 5, 5, 25, width=0, fill="green")
        self.x = StringVar()
        ttk.Label(self, textvariable=self.x, width=5).grid(row=0, column=1)

    #更新进度条函数
    def change_schedule(self, now_schedule, all_schedule):
        rate = now_schedule/all_schedule
        self.canvas.coords(self.fill_rec, (5, 5, 6 + rate*100, 25))
        self.update()
        self.x.set(f"{rate*100:.3g}%")
        if rate >= 1:
            self.x.set("完成")


def run():
    root = Tk()
    #创建画布
    frame = Frame(root)
    frame.grid(row=0, column=0)  # 使用时将框架根据情况选择新的位置
    for i in range(100):
        time.sleep(0.1)
        frame.change_schedule(i, 99)
    root.mainloop()


if __name__ == "__main__":
    run()

效果图:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。