我已经在控制台中进行了反应测试,但是我很好奇要用它来制作桌面应用程序,所以我决定检查Tkinter,但是我遇到了一些转换和功能问题。 首先,对于倒计时,Tkinter可以覆盖字符串以产生倒计时(3,2,1,GO)的效果。 其次,我不确定如何将'start'变量设置为浮点数,以便可以将其减去以提供'elapsed'变量的值。 我觉得我真的很近。只是缺少一些东西。
from tkinter import*
from tkinter import ttk
import time, random
root = Tk()
content = ttk.Frame(root, padding=(3,3,12,12), width=500, height=100)
def callback():
elapsed = time.time()- start
print(elapsed)
result.set(elapsed)
result = StringVar()
def countdown():
time.sleep(random.randint(2,6))
d = '!__GO__!'
cd.set(d)
start = time.time()
start.set(start)
start = StringVar()
cd = StringVar()
ttk.Button(content, text="Start", command=countdown).grid(column=1, row=1, sticky=NW)
ttk.Label(content, text="Click on GO!").grid(column=2, row=1, sticky=N)
ttk.Button(content, text="Go", command = callback).grid(column=2, row=2, sticky=N)
ttk.Label(content, text="Result is: ").grid(column=2, row=3, sticky=(E,W))
ttk.Label(content, textvariable=cd).grid(column=2, row=4, sticky=S)
ttk.Label(content, textvariable=result).grid(column=3, row=3, sticky=S)
我希望倒数显示3,然后2覆盖它,然后1,然后GO。 然后显示从按下“开始”按钮到按下“开始”按钮为止的经过时间(即经过时间= time.time()-开始)
答案 0 :(得分:0)
time.sleep
将阻塞您的主线程,以便您的程序在time.sleep
期间冻结。您需要thread
函数,或使用tkinter可用的after
方法,该方法允许您在特定时间后触发回调。
from tkinter import *
from tkinter import ttk
from datetime import datetime
import random
root = Tk()
content = ttk.Frame(root, padding=(3,3,12,12), width=500, height=100)
content.pack()
def callback():
global start_time
elapsed = datetime.now() - start_time
result.set(elapsed)
result = StringVar()
def start(): #generates random countdown timer
t = random.randint(2,6)
def countdown(num): #function to provide countdown effect
start_var.set(num)
if num >=1:
num -= 1
root.after(1000,lambda: countdown(num)) #call itself again until countdown reaches 0
else:
start_var.set("GO!")
global start_time
start_time = datetime.now()
countdown(t)
start_var = StringVar()
ttk.Button(content, text="Start", command=start).grid(column=1, row=1, sticky=NW)
ttk.Label(content, text="Click on GO!").grid(column=2, row=1, sticky=N)
ttk.Button(content, text="Go", command=callback).grid(column=2, row=2, sticky=N)
ttk.Label(content, text="Result is: ").grid(column=2, row=3, sticky=(E,W))
ttk.Label(content, textvariable=start_var).grid(column=2, row=4, sticky=S)
ttk.Label(content, textvariable=result).grid(column=3, row=3, sticky=S)
root.mainloop()