Статус объекта не имеет атрибута «загрузка» - PullRequest
1 голос
/ 02 июля 2019

Я работаю над индикатором выполнения в 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'". 

То, что я хочу, это чтобы индикатор выполнения автоматически обновлялся безиспользование любой кнопки.он должен заполниться и остановиться, когда заполнится.

1 Ответ

0 голосов
/ 03 июля 2019

Обычно вы создаете 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...