import tkinter as tk
from tkinter import messagebox
class CountdownTimer:
def __init__(self, root):
self.root = root
self.root.title("倒计时1.0 By Gordon")
self.root.attributes("-topmost",1)
self.root.geometry("500x320")
self.timelabel = tk.Label(self.root, text="设置倒计时时间",font=("Helvetica", 14,'bold'))
self.timelabel.pack()
self.minute_var = tk.StringVar(root)
self.minute_var.set("25")
self.minute_option = tk.OptionMenu(root, self.minute_var, *range(1,60))
self.minute_option.pack()
self.remaining_time = 25 * 60 # 默认倒计时时间为25分钟
self.is_running = False
self.is_paused = False
#设置日钟显示
self.timer_label = tk.Label(self.root, text="", font=("Helvetica", 120,"bold"),fg="blue")
self.timer_label.pack(expand=True, fill=tk.BOTH, pady=20)
button_frame = tk.Frame(self.root)
button_frame.pack(side=tk.TOP,anchor="n")
# 设置 Scale 控件在同一行
self.scale = tk.Scale(button_frame, from_=50, to=400, width=15, orient='horizontal', command=self.resize)
self.scale.set(120)
self.scale.pack(expand=True, fill=tk.BOTH) # 确保 Scale 在同一行
self.start_button = tk.Button(button_frame, text="开始(S)", width=10, font=("times new romman", 11),command=self.start_timer)
self.start_button.pack(side=tk.LEFT)
self.reset_button = tk.Button(button_frame, text="重置(R)", width=10, font=("times new romman", 11),command=self.reset_timer)
self.reset_button.pack(side=tk.LEFT)
self.pause_button = tk.Button(button_frame, text="暂停(P)", width=10, font=("times new romman", 11),command=self.pause_timer)
self.pause_button.pack(side=tk.LEFT)
self.exit_button = tk.Button(button_frame, text="退出(Q)", width=10, font=("times new romman", 11), command=self.ui_quit)
self.exit_button.pack(side=tk.LEFT)
self.exit_button = tk.Button(button_frame, text="最小化(Q)", width=10, font=("times new romman", 11), command=self.ui_quit)
self.exit_button.pack(side=tk.LEFT)
self.update_timer()
self.root.bind('<r>',self.reset_timer)
self.root.bind('<s>',self.start_timer)
self.root.bind('<p>',self.pause_timer)
self.root.bind('<q>',self.ui_quit)
def resize(self,ev = None):
# 监控窗口是不是最大化,最大化则字体变大,否则为55号字
if self.root.state() == 'zoomed':
self.timer_label.config(font = 'Helvetica -%d bold' % self.scale.get())
elif not self.root.state() == 'zoomed':#self.root.state() == 'iconic':
self.timer_label.config(font = 'Helvetica -%d bold' % 120)
self.after_id = self.root.after(1000, self.resize)
def ui_quit(self,envent = None):
self.root.after_cancel(self.after_id) # 取消所有 after 调用
self.root.destroy()
self.root.quit()
def update_timer(self):
if self.remaining_time == 0:
self.timer_label.configure(text="Time's up!",font=("Helvetica", 200),fg="red")
messagebox.showinfo("倒计时完成", "时间已到!")
self.is_running = False
self.is_paused = True
minutes = int(self.minute_var.get())
self.remaining_time = minutes * 60
minutes = self.remaining_time // 60
seconds = self.remaining_time % 60
self.timer_label.configure(text=f"{minutes:02d}:{seconds:02d}",fg="blue")
if self.is_running and not self.is_paused:
self.remaining_time -= 1
self.after_id = self.root.after(1000, self.update_timer)
def start_timer(self,event=None):
if not self.is_running:
minutes = int(self.minute_var.get())
self.remaining_time = minutes * 60
self.is_running = True
self.is_paused = False
self.pause_button.configure(text="暂停(P)")
def reset_timer(self,event = None):
self.is_running = False
self.remaining_time = int(self.minute_var.get()) * 60 # 默认倒计时时间为1分钟
#self.timer_label.configure(text="")
self.pause_button.configure(text="暂停(P)")
def pause_timer(self,event = None):
if self.is_paused:
self.is_paused = False
self.pause_button.configure(text="暂停(P)")
else:
self.is_paused = True
self.pause_button.configure(text="继续(P)")
if __name__ == "__main__":
root = tk.Tk()
countdown_timer = CountdownTimer(root)
root.mainloop()