Python “状态对象没有属性”;“装载”;

Python “状态对象没有属性”;“装载”;,python,tkinter,progress-bar,Python,Tkinter,Progress Bar,我正在使用面向对象的设计在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

我正在使用面向对象的设计在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'". 

我想要的是进度条自动更新,而无需使用任何按钮。它应该满了,满了就停了。

通常您会创建一个
IntVar
,并将其设置为
进度条的变量。然后,您可以跟踪
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()

通常,您会创建一个
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()

乍一看,您的代码对我来说似乎是正确的,您能否显示用于调用和使用Status类的部分的更多信息?我刚刚编辑了它以显示从命令中丢失
()
。它需要是
command=self.start\u progress
,而不是
command=self.start\u progress()
这样做,现在它说
\u tkinter.TclError:unknown option“-command”
我认为进度条不接受命令回调。通过传递命令,您试图实现什么?乍一看,您的代码似乎对我来说是正确的,您能否显示用于调用和使用Status类的部分的更多信息?我刚刚编辑了它,以显示从命令中丢失的
()
。它需要是
command=self.start\u progress
,而不是
command=self.start\u progress()
这样做,现在它说
\u tkinter.TclError:unknown option“-command”
我认为进度条不接受命令回调。你想通过下达命令来达到什么目的?哦,这很有道理。非常感谢@如果这有帮助的话,考虑接受答案,这样这个问题就可以结束了。非常感谢@如果这有帮助的话,考虑接受答案,这样这个问题就可以结束了。