首页 > 解决方案 > 状态对象没有属性“正在加载”

问题描述

我正在使用面向对象的设计在 Tkinter 中处理进度条,但遇到了问题。

from tkinter import *
from tkinter import ttk

class Status:
    def __init__(self):
        self.root = Tk()
        self.root.geometry("400x20")
        self.loading = ttk.Progressbar(self.root, length=15, value=0, orient=HORIZONTAL, command=self.start_progress())
        self.loading.pack(fill=X)
        self.root.mainloop()

    def start_progress(self):
        self.loading.start(10)

bar = Status()

我应该得到一个无限期加载的进度条,但相反,我得到了

"self.loading.start(10)
AttributeError: 'Status' object has no attribute 'loading'". 

我想要的是进度条在不使用任何按钮的情况下自动更新。它应该充满并在充满时停止。

标签: pythontkinterprogress-bar

解决方案


通常,您会创建一个IntVar并将其设置为您的Progressbar. 然后您可以跟踪您的更改IntVar并在必要时停止。

from tkinter import *
from tkinter import ttk

class Status:
    def __init__(self):
        self.root = Tk()
        self.root.geometry("400x20")
        self.var = IntVar()
        self.loading = ttk.Progressbar(self.root, length=15, variable=self.var, orient=HORIZONTAL)
        self.loading.pack(fill=X)
        self.var.trace("w",self.trace_method)
        self.start_progress()
        self.root.mainloop()

    def start_progress(self):
        self.loading.start(10)

    def trace_method(self,*args):
        if self.var.get() >= 99: #when it reaches 100 it would go back to 0
            self.loading.stop()

bar = Status()

推荐阅读