如何在Tkinter中用单个按钮实现计时器暂停/恢复(不使用Pygame)
解决计时器暂停/恢复功能问题
你的核心问题是暂停时未保存当前剩余的倒计时时长,导致无法从断点继续计时。以下是修改后的完整代码,实现了单个按钮切换暂停/恢复功能:
from tkinter import * import math WORK_MIN = 30 BREAK_MIN = 5 reps = 0 paused = False remaining_time = 0 # 新增:保存暂停时剩余的秒数 # --------------------------- TIMER ---------------------------- # def start_timer(): global reps, paused, remaining_time reps += 1 paused = False work_sec = WORK_MIN * 60 break_sec = BREAK_MIN * 60 if reps % 2 == 1: title_label.config(text="Study") remaining_time = work_sec count_down(remaining_time) else: title_label.config(text="Break") remaining_time = break_sec count_down(remaining_time) window.attributes('-topmost', 0) pause_button.config(text="Pause") # 启动计时时重置按钮文本 # ------------------------ COUNTDOWN--------------------------- # def count_down(count): global paused, remaining_time remaining_time = count # 实时更新剩余时间 count_min = math.floor(count / 60) count_sec = count % 60 if count_min < 10: count_min = f"0{count_min}" if count_sec < 10: count_sec = f"0{count_sec}" canvas.itemconfig(timer_text, text=f"{count_min}:{count_sec}") if count > 0 and not paused: window.after(1000, count_down, count - 1) elif count == 0: start_timer() # ---------------------------- PAUSE/RESUME ------------------------------- # def pause_resume_function(): global paused paused = not paused if paused: pause_button.config(text="Resume") else: count_down(remaining_time) # 恢复时从剩余时间继续计时 pause_button.config(text="Pause") # ---------------------------- UI ------------------------------- # window = Tk() window.title("Pomodoro Timer") title_label = Label(text="Timer", font=("Arial", 24, "bold")) title_label.grid(column=1, row=0, pady=10) check_marks = Label(text="", font=("Arial", 16)) check_marks.grid(column=1, row=4, pady=10) canvas = Canvas(width=200, height=224, bg="lightblue", highlightthickness=0) timer_text = canvas.create_text(100, 128, text="00:00", fill="white", font=("Courier", 45, "bold")) canvas.grid(column=1, row=1, pady=10) start_button = Button(text="Start", command=start_timer, font=("Arial", 12)) start_button.grid(column=0, row=2, padx=20) pause_button = Button(text="Pause", command=pause_resume_function, font=("Arial", 12)) pause_button.grid(column=2, row=2, padx=20) window.mainloop()
关键修改说明:
- 新增
remaining_time全局变量,实时记录当前剩余的倒计时秒数,暂停时保留断点数据。 - 重命名原
pause_function为pause_resume_function,在函数内切换paused状态的同时更新按钮文本(Pause/Resume),优化交互体验。 - 恢复计时时,直接调用
count_down(remaining_time),从断点继续倒计时流程。 - 在
start_timer中重置按钮文本为"Pause",避免多次启动后按钮状态混乱。 - 微调UI的字体和间距,提升界面美观度。
内容的提问来源于stack exchange,提问作者Cynthia168
相关产品推荐
相关产品推荐

