【问题标题】:Stop function doesn't work using progressbar使用进度条停止功能不起作用
【发布时间】:2020-07-13 21:18:44
【问题描述】:

我正在使用 Progressbar 在 tkinter 中编写程序。但是当我添加停止功能时出现问题,它不起作用。当我按下“停止”按钮时,没有任何反应,它应该停止加载进度条。我使用 Python 3.8 版。下面的代码:

from tkinter import *
from tkinter import ttk
import time
root = Tk()
def run():
    pb['maximum']=100
    for i in range(101):
        time.sleep(0.05)
        pb['value']=i
        pb.update()
def stop():
    pb.stop()
runbutt = Button(root,text="Runprogr",command=run)
runbutt.pack()
stopbutt = Button(root,text="Stopbut",command=stop)
stopbutt.pack()
pb = ttk.Progressbar(root,length=300,orient="horizontal")
pb.pack()
root.geometry("300x300")
root.mainloop()   

【问题讨论】:

    标签: python tkinter progress-bar


    【解决方案1】:

    原因是pb.stop无法停止run中的函数,它也会自己增加。

    您可以使用.after(ms, callback) 来添加值(然后您不再需要使用time.sleep())。

    如果你想阻止它,使用.after_cancel():

    from tkinter import *
    from tkinter import ttk
    import time
    
    root = Tk()
    root.add_value = None
    
    def run():
        def add():
            if pb['value'] >= 100:
                return
            pb['value'] += 1
            root.add_value = root.after(50, add)
        if root.add_value: # to prevent increasing the speed when user pressed "Runprogr" many times.
            return
    
        root.add_value = root.after(50, add)
    
    
    def stop():
        if not root.add_value: # to prevent raising Exception when user pressed "Stopbut" button many times.
            return
        root.after_cancel(root.add_value)
        root.add_value = None
    
    
    runbutt = Button(root, text="Runprogr", command=run)
    runbutt.pack()
    stopbutt = Button(root, text="Stopbut", command=stop)
    stopbutt.pack()
    pb = ttk.Progressbar(root, length=300, orient="horizontal")
    pb.pack()
    root.geometry("300x300")
    root.mainloop()
    

    【讨论】:

    • 您好,有一个问题要问您。
    • pastebin.com/4BkeumLe 它不起作用。我知道这不是上面的问题。但我没有问问题。你能看看这段代码,你能告诉我我应该更正什么吗?这是关于部分搜索。
    • 在 tkinter 树视图中
    • @RObertos12 我建议你问一个新问题,你的代码中的变量names 是什么?
    • 在按下按钮添加后,我尝试以某种方式将值传递给 var "names",但它的错误名称未定义。我试图用不同的方式重写这段代码,但每次都失败了。
    猜你喜欢
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多