【发布时间】:2020-08-25 01:08:02
【问题描述】:
更多细节:我想做的是一个一分钟长的进度条,一旦一分钟结束,它会重新启动并循环。顶部的代码用于在新的一分钟开始时自动启动进程。问题是栏同步并自行启动很好,但一两分钟后它开始变慢几秒钟,最令人困惑的部分是它根本不一致,它以不同的速度变慢每次我运行它。任何帮助将不胜感激。
这是我的代码:
import time
from tkinter import *
import datetime as dt
from tkinter.ttk import *
now = dt.datetime.now()
sync_now = '%02d:%02d:%02d' % (now.hour, now.minute, now.second)
sync_now_object = dt.datetime.strptime(sync_now, '%H:%M:%S').time()
second_of_day = int(now.hour * 60 * 60 + now.minute * 60 + now.second)
second_of_day = int(second_of_day / 60) * 60 + 60
hour = int(second_of_day / 60 / 60)
minute = int((second_of_day % (60 * 60)) / 60)
second = int(second_of_day % 60)
target_time = dt.time(hour, minute, second)
target_time_str = str(target_time)
print(target_time)
print(sync_now)
def time_to_num(time_str):
hh, mm , ss = map(int, time_str.split(':'))
return ss + 60*(mm + 60*hh)
difference_target_now=time_to_num(target_time_str)-time_to_num(sync_now)
print(difference_target_now)
after_difference = difference_target_now*1000
print(after_difference)
# creating Tk window
app = Tk()
app.wm_attributes('-topmost', 1)
# setting geometry of tk window
app.geometry("600x100")
# Using title() to display a message in
# the dialogue box of the message in the
# title bar.
app.title("")
progress = Progressbar(app, orient=HORIZONTAL,
length=600, mode='determinate')
def my_progress():
progress['maximum'] = 60
progress['value'] = 1
app.update()
time.sleep(1)
progress['value'] = 2
app.update()
time.sleep(1)
progress['value'] = 3
app.update()
time.sleep(1)
progress['value'] = 4
app.update()
time.sleep(1)
progress['value'] = 5
app.update()
time.sleep(1)
progress['value'] = 6
app.update()
time.sleep(1)
progress['value'] = 7
app.update()
time.sleep(1)
progress['value'] = 8
app.update()
time.sleep(1)
progress['value'] = 9
app.update()
time.sleep(1)
progress['value'] = 10
app.update()
time.sleep(1)
progress['value'] = 11
app.update()
time.sleep(1)
progress['value'] = 12
app.update()
time.sleep(1)
progress['value'] = 13
app.update()
time.sleep(1)
progress['value'] = 14
app.update()
time.sleep(1)
progress['value'] = 15
app.update()
time.sleep(1)
progress['value'] = 16
app.update()
time.sleep(1)
progress['value'] = 17
app.update()
time.sleep(1)
progress['value'] = 18
app.update()
time.sleep(1)
progress['value'] = 19
app.update()
time.sleep(1)
progress['value'] = 20
app.update()
time.sleep(1)
progress['value'] = 21
app.update()
time.sleep(1)
progress['value'] = 22
app.update()
time.sleep(1)
progress['value'] = 23
app.update()
time.sleep(1)
progress['value'] = 24
app.update()
time.sleep(1)
progress['value'] = 25
app.update()
time.sleep(1)
progress['value'] = 26
app.update()
time.sleep(1)
progress['value'] = 27
app.update()
time.sleep(1)
progress['value'] = 28
app.update()
time.sleep(1)
progress['value'] = 29
app.update()
time.sleep(1)
progress['value'] = 30
app.update()
time.sleep(1)
progress['value'] = 31
app.update()
time.sleep(1)
progress['value'] = 32
app.update()
time.sleep(1)
progress['value'] = 33
app.update()
time.sleep(1)
progress['value'] = 34
app.update()
time.sleep(1)
progress['value'] = 35
app.update()
time.sleep(1)
progress['value'] = 36
app.update()
time.sleep(1)
progress['value'] = 37
app.update()
time.sleep(1)
progress['value'] = 38
app.update()
time.sleep(1)
progress['value'] = 39
app.update()
time.sleep(1)
progress['value'] = 40
app.update()
time.sleep(1)
progress['value'] = 41
app.update()
time.sleep(1)
progress['value'] = 42
app.update()
time.sleep(1)
progress['value'] = 43
app.update()
time.sleep(1)
progress['value'] = 44
app.update()
time.sleep(1)
progress['value'] = 45
app.update()
time.sleep(1)
progress['value'] = 46
app.update()
time.sleep(1)
progress['value'] = 47
app.update()
time.sleep(1)
progress['value'] = 48
app.update()
time.sleep(1)
progress['value'] = 49
app.update()
time.sleep(1)
progress['value'] = 50
app.update()
time.sleep(1)
progress['value'] = 51
app.update()
time.sleep(1)
progress['value'] = 52
app.update()
time.sleep(1)
progress['value'] = 53
app.update()
time.sleep(1)
progress['value'] = 54
app.update()
time.sleep(1)
progress['value'] = 55
app.update()
time.sleep(1)
progress['value'] = 56
app.update()
time.sleep(1)
progress['value'] = 57
app.update()
time.sleep(1)
progress['value'] = 58
app.update()
time.sleep(1)
progress['value'] = 59
app.update()
time.sleep(1)
progress['value'] = 60
app.update()
time.sleep(1)
app.after(0, my_progress)
progress.pack()
app.after(after_difference, my_progress)
app.mainloop()
【问题讨论】:
-
sleep()会阻止tkinter.mainloop(),所以最好改用after()。
标签: python tkinter progress-bar