gpt4 book ai didi

python - Tkinter:持续时间不确定的 ProgressBar

转载 作者:行者123 更新时间:2023-12-03 20:21:45 26 4
gpt4 key购买 nike

我想在 Tkinter 中实现一个满足以下要求的进度条:

  • 进度条是主窗口中唯一的元素
  • 无需按任何按钮即可通过启动命令启动
  • 可以等到未知持续时间的任务完成
  • 只要任务没有完成,进度条的指示器就会一直移动
  • 它可以通过停止命令关闭而无需按下任何停止栏

  • 到目前为止,我有以下代码:
    import Tkinter
    import ttk
    import time

    def task(root):
    root.mainloop()

    root = Tkinter.Tk()
    ft = ttk.Frame()
    ft.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
    pb_hD = ttk.Progressbar(ft, orient='horizontal', mode='indeterminate')
    pb_hD.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
    pb_hD.start(50)
    root.after(0,task(root))
    time.sleep(5) # to be replaced by process of unknown duration
    root.destroy()

    在这里,问题是5s结束后进度条没有停止。

    有人可以帮我找出错误吗?

    最佳答案

    一旦主循环处于事件状态,脚本不会移动到下一行,直到根被销毁。
    可能还有其他方法可以做到这一点,但我更喜欢使用线程来做到这一点。

    像这样的东西,

    import Tkinter
    import ttk
    import time
    import threading

    #Define your Progress Bar function,
    def task(root):
    ft = ttk.Frame()
    ft.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
    pb_hD = ttk.Progressbar(ft, orient='horizontal', mode='indeterminate')
    pb_hD.pack(expand=True, fill=Tkinter.BOTH, side=Tkinter.TOP)
    pb_hD.start(50)
    root.mainloop()

    # Define the process of unknown duration with root as one of the input And once done, add root.quit() at the end.
    def process_of_unknown_duration(root):
    time.sleep(5)
    print 'Done'
    root.destroy()

    # Now define our Main Functions, which will first define root, then call for call for "task(root)" --- that's your progressbar, and then call for thread1 simultaneously which will execute your process_of_unknown_duration and at the end destroy/quit the root.

    def Main():
    root = Tkinter.Tk()
    t1=threading.Thread(target=process_of_unknown_duration, args=(root,))
    t1.start()
    task(root) # This will block while the mainloop runs
    t1.join()

    #Now just run the functions by calling our Main() function,
    if __name__ == '__main__':
    Main()

    如果这有帮助,请告诉我。

    关于python - Tkinter:持续时间不确定的 ProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25202147/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com