0

我从 codemy.com 复制了示例。https://www.youtube.com/watch?v=Grbx15jRjQA

当我运行程序时,我得到了栏和按钮。但是,一旦我单击按钮以增加进度条,就会出现此错误。

TypeError:“NoneType”对象不可下标

有人可以帮我解决这个错误吗?

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("Test bar")
root.geometry("600x400")


def step():
    my_progress["value"] += 20


my_progress = ttk.Progressbar(
    root, orient=HORIZONTAL, length=300, mode='determinate').pack(pady=20)


my_button = Button(root, text="Progress", command=step).pack(pady=20)

root.mainloop()
4

2 回答 2

0

我不熟悉 ttk.progressbar,所以我的研究并不详尽,但我找不到您尝试访问该值的方式。我认为最好的方法是创建一个 IntVar() 来存储进度条的进度,并将其分配给进度条,如下所示:

progress = IntVar()

def step():
    progress.set(progress.get() + 20)

my_progress = ttk.Progressbar(
    root, orient=HORIZONTAL, length=300, mode='determinate', variable=progress).pack(pady=20)

当您通过 set 方法更改 IntVar 的值时,进度会自动更新,我自己测试过,效果很好。

于 2021-01-10T22:25:45.810 回答
0

这是因为您已将pack()(which is None)的结果分配给my_progress以下行:

my_progress = ttk.Progressbar(root, orient=HORIZONTAL, length=300, mode='determinate').pack(pady=20)

你需要把它分成两行:

my_progress = ttk.Progressbar(root, orient=HORIZONTAL, length=300, mode='determinate')
my_progress.pack(pady=20)
于 2021-01-11T00:43:11.727 回答