import datetime
import tkinter as tk
from tkinter import font
# 励志语句库
MOTIVATIONAL_QUOTES = [
"坚持就是胜利!", "每一天都是新的开始!", "努力不会背叛你。",
# ... 保持原有40条语句不变 ...
"你想要的未来,藏在现在的努力里。"
]
class CountdownApp:
def __init__(self, master):
self.master = master
master.title("高考倒计时励志牌")
master.configure(bg="#F0F8FF") # 爱丽丝蓝背景
# 设置字体
self.title_font = font.Font(family="微软雅黑", size=24, weight="bold")
self.count_font = font.Font(family="Arial", size=48, weight="bold")
self.quote_font = font.Font(family="楷体", size=18)
# 创建界面元素
self.create_widgets()
# 初始更新
self.update_display()
# 每天00:00自动更新
self.schedule_update()
def create_widgets(self):
# 主框架
main_frame = tk.Frame(self.master, bg="#F0F8FF", padx=20, pady=20)
main_frame.pack(expand=True)
# 标题
title_label = tk.Label(main_frame,
text="2025高考倒计时",
font=self.title_font,
bg="#F0F8FF",
fg="#2F4F4F") # 深石板灰
title_label.pack(pady=(0, 20))
# 倒计时数字显示
self.count_label = tk.Label(main_frame,
font=self.count_font,
bg="#87CEEB", # 天蓝色
fg="#FFFFFF",
width=3,
relief="ridge",
borderwidth=4)
self.count_label.pack(pady=10)
# 单位标签
unit_label = tk.Label(main_frame,
text="天",
font=self.title_font,
bg="#F0F8FF",
fg="#2F4F4F")
unit_label.pack()
# 分隔线
sep = tk.Canvas(main_frame, bg="#F0F8FF", height=20, highlightthickness=0)
sep.create_line(50, 10, 350, 10, width=2, fill="#87CEEB")
sep.pack(fill='x', pady=20)
# 励志语句显示
self.quote_label = tk.Label(main_frame,
wraplength=380,
justify="center",
font=self.quote_font,
bg="#F0F8FF",
fg="#228B22") # 森林绿
self.quote_label.pack(pady=10)
# 状态栏
self.status_bar = tk.Label(self.master,
text="每日一句激励,成就更好自己!",
bd=1,
relief="sunken",
anchor="w",
bg="#E6E6FA", # 薰衣草色
fg="#696969")
self.status_bar.pack(side="bottom", fill="x")
def calculate_days(self):
target_date = datetime.date(2025, 3, 20)
start_date = datetime.date(2025, 2, 13)
today = datetime.date.today()
days_remaining = (target_date - today).days
days_passed = (today - start_date).days
return days_remaining, days_passed
def get_quote_index(self, days_passed):
if days_passed < 0:
return -1
return days_passed % len(MOTIVATIONAL_QUOTES)
def update_display(self):
days_remaining, days_passed = self.calculate_days()
# 更新倒计时
if days_remaining < 0:
self.count_label.config(text="0", bg="#FF4500") # 橙红色
else:
self.count_label.config(text=str(days_remaining), bg="#87CEEB")
# 更新励志语句
if days_passed < 0:
self.quote_label.config(text="倒计时尚未开始,提前准备就是胜利!")
self.status_bar.config(text="当前日期早于2025年2月13日")
else:
index = self.get_quote_index(days_passed)
self.quote_label.config(text=MOTIVATIONAL_QUOTES[index])
self.status_bar.config(text=f"已坚持 {days_passed} 天 ? {datetime.date.today().isoformat()}")
def schedule_update(self):
now = datetime.datetime.now()
next_day = now + datetime.timedelta(days=1)
next_day = next_day.replace(hour=0, minute=0, second=0)
delta = (next_day - now).seconds * 1000 # 转换为毫秒
self.master.after(delta, self.daily_update)
def daily_update(self):
self.update_display()
# 每天00:00后重新设置定时器
self.master.after(86400000, self.daily_update) # 24小时
if __name__ == "__main__":
root = tk.Tk()
root.geometry("500x400+300+200") # 窗口大小和初始位置
# 设置窗口图标(需要准备ico文件)
# root.iconbitmap('clock.ico')
app = CountdownApp(root)
root.mainloop()
主要改进和特性:
1. 美观的UI设计:
- 柔和渐变色背景
- 大号立体数字显示
- 书法字体标题
- 装饰性分隔线
- 状态栏显示坚持天数和当前日期
2. 智能更新机制:
- 每天00:00自动刷新数据
- 倒计时归零时数字变红
- 自动计算天数差和语句索引
3. 响应式布局:
- 自适应窗口大小
- 自动换行的励志语句
- 合理的元素间距和边距
4. 视觉增强:
- 使用不同颜色区分状态
- 立体边框效果
- 专业字体搭配
- 状态栏进度提示
使用方法:
1. 直接运行即可,会自动获取系统日期
2. 窗口默认位置在屏幕(300,200)坐标处
3. 每天凌晨自动更新显示内容
4. 倒计时归零后会显示红色0并停止更新
扩展建议:
1. 可以添加`clock.ico`文件作为窗口图标
2. 增加声音提醒功能
3. 添加历史记录查看功能
4. 集成天气信息显示
5. 添加用户自定义语句功能
这个版本在保持功能完整性的同时,通过合理的颜色搭配、字体选择和布局设计,使界面更加专业美观,适合长期在桌面上显示。