1 回答
TA贡献1725条经验 获得超7个赞
在您的代码中,tkinter 循环阻塞了主循环。当计时器完成时,您需要退出 tk 循环。您还需要仅在启动计时器时才启动 tk 循环,否则 tk 循环将永远不会退出。
这是工作代码:
import tkinter as tkr
import keyboard
from playsound import playsound
root = None
timer_display = None
root = tkr.Tk()
root.geometry("+0+0")
root.overrideredirect(True)
root.wm_attributes("-topmost", True)
root.wm_attributes("-alpha", 0.01)
root.resizable(0, 0)
timer_display = tkr.Label(root, font=('Trebuchet MS', 30, 'bold'), bg='black')
timer_display.pack()
seconds = 45
toggle_button = 'x'
enabled = False
def countdown(time):
if time > 0:
mins, secs = divmod(time, 60)
def color_change(t_time):
if t_time > 10:
return 'green'
elif 7 <= t_time <= 10:
return 'yellow'
elif t_time < 7:
return 'red'
timer_display.config(text="{:02d}:{:02d}".format(mins, secs),
fg=color_change(time)), root.after(1000, countdown, time - 1)
else:
root.wm_attributes('-alpha', 0.01)
root.quit() # exit tk root loop
def start_countdown():
root.wm_attributes('-alpha', 0.7)
countdown(seconds)
last_state = False
while True:
key_down = keyboard.is_pressed(toggle_button)
# If the toggle button is pressed, toggle the enabled value and print
if key_down != last_state:
last_state = key_down
if last_state:
enabled = True
if enabled:
start_countdown()
print("Activated")
playsound('count.mp3')
else:
start_countdown()
root.mainloop() # timer will exit this loop
添加回答
举报