Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用计时器更改Tkinter Python中的progressbar值_Python_Variables_Tkinter_Progress Bar - Fatal编程技术网

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

如何使用计时器更改Tkinter Python中的progressbar值,python,variables,tkinter,progress-bar,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 prin

因此,我尝试运行以下代码:

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新手。我的目标是通过这个计时器方法控制进度条的值

如果你看到我所做的并不是我接受各种建议的最好方式


提前谢谢

您实际上不想在
超时
方法中将
i
定义为全局;在
\uuuu init\uuuu
中定义的
i
不是全局的。它位于
\uuuu init\uuuu
方法的范围内


更好的方法是将
i
定义为类的属性:
self.i
。然后类中的任何方法都可以轻松访问self.i

全局i
不引用类,而是引用类之外的全局命名空间。您应该改用class属性。
controller.after(10,timeout())
立即调用
timeout()
。此处在之后使用
是毫无意义的。这可能不是唯一的问题,但这肯定是问题的一部分。我发现如果不是在主循环中,我就不应该调用计时器,所以现在我开始重写与计时器相关的代码,当我有更多消息时,请与您联系!,再次感谢。