如何使用计时器更改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()
。此处在之后使用是毫无意义的。这可能不是唯一的问题,但这肯定是问题的一部分。我发现如果不是在主循环中,我就不应该调用计时器,所以现在我开始重写与计时器相关的代码,当我有更多消息时,请与您联系!,再次感谢。