You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:55:27