进度条在打印语句后启动 [英] Progressbar starts after print statements

查看:25
本文介绍了进度条在打印语句后启动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么进度条在打印命令之后开始?

Why is the progressbar starting after the print-commands?

我想先启动进度条.并且在执行第二个打印命令(在睡眠语句之后")时,我想停止进度条.有什么想法吗?

I want to start the progressbar first. And wenn the 2nd print command ("After the sleep statement") was excecuted, I want to stop the progressbar. Any ideas?

from tkinter import Tk 
from tkinter.ttk import Progressbar 
import time

# root window 
root = Tk() 
root.geometry('300x120') 
root.title('Progressbar Demo')

root.grid()

# progressbar 
pb = Progressbar(
    root,
    orient='horizontal',
    mode='indeterminate',
    length=280 )

# place the progressbar 
pb.grid(column=0, row=0, columnspan=2, padx=10, pady=20)

pb.start()



print("Before the sleep statement")
time.sleep(5)
print("After the sleep statement")

# pb.stop()

root.mainloop()

目前的问题是进度条只有在 time.sleep 命令后才启动.

The current problem is that the progressbar is only started after time.sleep command.

推荐答案

tkinter 的进度条和所有图形元素都是从主循环 (root.mainloop()) 启动的.所以,睡眠是在主循环之前完成的.如果你愿意,你应该在主循环中实现 sleeping.

The progress bar and all graphical elements of tkinter are launched from main loop (root.mainloop()). So, sleeping is done before the main loop. If you want so, you should implement spleeping IN main loop.

此外,对于非即时处理,建议使用单独的线程(例如使用 threading.Tread)以避免阻塞 GUI 线程.

Furthermore, for a non-instantaneous processing, it's recommended to use a separate thread (e.g. with threading.Tread) to avoid blocking the GUI thread.

你可以这样做:

import threading
import time

from tkinter import Tk, Button
from tkinter.ttk import Progressbar


# root window
root = Tk()
root.geometry('300x120')
root.title('Progressbar Demo')

root.grid()

# progressbar
pb = Progressbar(root, orient='horizontal', mode='indeterminate', length=280)
# place the progressbar
pb.grid(column=0, row=0, columnspan=2, padx=10, pady=20)

def statement():
    pb.start()
    print("Before the sleep statement")
    time.sleep(5)
    print("After the sleep statement")
    pb.stop()

button = Button(root, text="Start", command=lambda: threading.Thread(target=statement).start())
button.grid(column=0, row=1)

root.mainloop()

这篇关于进度条在打印语句后启动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆