python - 如何使用计时器更改 Tkinter 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()
但是出现了这个错误:
赋值前引用的局部变量“i”
我无法让它工作,我不知道为什么,也许有一些关于类的概念以及它们里面的所有东西我没有编码好的,我已经和他们斗争了一段时间,因为我有点新在 Python。我的目标是通过这个计时器方法来控制进度条的值。
如果您发现我所做的并不是我接受各种建议的最佳方式。
提前致谢!
解决方案
您实际上并不想在您的方法中定义i
为全局;定义的timeout
不是全局的。它位于方法的范围内。i
__init__
__init__
更好的方法是定义i
为您的类的属性:self.i
. 然后你类中的任何方法都可以轻松访问self.i
。
推荐阅读
- python - 收到无效输入后,如何阻止程序跳转到不同的 if 语句?
- python - 为什么没有在输出中打印???Python
- firefox - 为什么我今天无法访问 YouTube?PR_END_OF_FILE_ERROR
- python - InterfaceError: 未找到数据源名称并且未指定默认驱动程序 (0) (SQLDriverConnect)
- java - 无法从字节/布尔数组加载,因为“BlackWhite.marked”为空
- kubernetes - 如何清理 pod 不再使用的 kubernetes configMaps
- javascript - 为什么 push() 设置新的排序 AZ?
- macos - mac上所有> 1.2颤振版本的问题
- python-3.x - 根据绘图颜色对相似矩阵进行排序
- java - 二维数组通过[0]得到[1]