Как изменить значение индикатора выполнения в Tkinter Python с таймером - PullRequest
0 голосов
/ 18 января 2019

Итак, я пытаюсь запустить этот код:

class PageOne(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)

        i = 0
        def timeout():
            global i
            barraProgreso["value"] = i
            i += 1
            print("oli")



        # duration is in seconds

        display = tkinter.Label(self, text="Progreso")
        display.grid(row=1, column=1, sticky=tkinter.N)
        barraProgreso = ttk.Progressbar(self, orient='horizontal', length=350, mode='determinate')
        barraProgreso.grid(row=1, column=1, sticky=tkinter.N)

        controller.after(10, timeout())
        #t = Timer(2.0, timeout)
        #t.start()

Но появляется эта ошибка:

локальная переменная 'i', на которую ссылается перед присваиванием

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

Если вы видите, что я делаю, не лучший способ, которым я открыт для всех видов предложений.

Заранее спасибо!

1 Ответ

0 голосов
/ 18 января 2019

Вы на самом деле не хотите определять i как глобальный в вашем timeout методе; i, определенный в __init__, не является глобальным. Он живет в рамках метода __init__.

Лучше всего определить i как атрибут вашего класса: self.i. Тогда любой метод в вашем классе может легко получить доступ к self.i.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...