如何使用tim修改Tkinter Python中的progressbar值

2024-09-29 01:22:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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()

但出现以下错误:

local variable 'i' referenced before assignment

我不能让它工作,我不知道为什么,也许有一些关于类的概念和它们里面的所有东西,我没有编码好,我已经与他们斗争了一段时间,因为我是一种新的Python。我的目标是通过这个计时器方法控制进度条的值。你知道吗

如果你看到我做的不是最好的方式,我是开放的各种建议。你知道吗

提前谢谢!你知道吗


Tags: 代码selfinittkinterdefdisplaytimeoutcolumn
1条回答
网友
1楼 · 发布于 2024-09-29 01:22:37

实际上,您不希望在timeout方法中将i定义为全局;在__init__中定义的i不是全局的。它在__init__方法的范围内。你知道吗

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

相关问题 更多 >