如何使用计时器更改Tkinter Python中的progressbar值

时间:2019-01-18 15:23:02

标签: python variables tkinter progress-bar

所以我正在尝试运行以下代码:

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'

我无法使其正常运行,我也不知道为什么,也许关于类及其内部包含的所有内容存在一些概念,我无法编写代码,因为我一直在与它们苦苦挣扎一段时间是Python的一种新功能。我的目标是通过此计时器方法控制进度条的值。

如果您看到我正在做的事情并不是接受所有建议的最佳方式。

谢谢!

1 个答案:

答案 0 :(得分:1)

您实际上并不想在i方法中将timeout定义为全局变量; i中定义的__init__不是全局的。它位于__init__方法的范围内。

一种更好的方法是将i定义为您的类的属性:self.i。这样,您班级中的任何方法都可以轻松访问self.i