【问题标题】:How can I increment my progress bar by a button click on tkinter?如何通过单击 tkinter 的按钮来增加进度条?
【发布时间】:2021-01-10 22:05:32
【问题描述】:

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

【问题讨论】:

    标签: tkinter button progress-bar


    【解决方案1】:

    我不熟悉 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的值时,进度会自动更新,我自己测试过,效果很好。

    【讨论】:

    • 嘿@Aliup!很高兴它帮助了你。对于将来的参考和其他需要帮助的人,我认为如果您通过单击我的答案点附近的复选标记将此问题标记为已解决,这样您就可以将其标记为正确并且每个人都会能够看到它解决了问题。
    【解决方案2】:

    这是因为您在以下行中将pack()(即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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2019-08-21
      • 2020-01-23
      相关资源
      最近更新 更多