python 桌面倒计时小工具 随意取用
工作时总忘记接下来要做的事,或者提醒自己喝水。所以用AI帮我写了这个倒计时工具,第一步:复制全部代码到本地环境,并保存,文件名根据自己喜好创建(最好是全英文)第二步:我这里是使用pycharm,先使用pycharm执行一下,看能不能执行成功第三步:保存好后,到文件目录下我的文件目录
·
工作时总忘记接下来要做的事,或者提醒自己喝水。
所以用AI帮我写了这个倒计时工具,
第一步:
复制全部代码到本地环境,并保存,文件名根据自己喜好创建(最好是全英文)
第二步:
我这里是使用pycharm,先使用pycharm执行一下,看能不能执行成功
第三步:
保存好后,到文件目录下
我的文件目录

第四步:
在目录框中打入cmd 并回车
第五步:
在弹出框中输入 pyinstaller -F -w alarm_clock.py 并回车
alarm_clock为你保存文件的名字

第六步:
在dist文件夹中就可以找到我们的小工具啦,也可以传给其他人一起享用啦


在使用过程中有更好的想法,可以评论留言,逐渐增强。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
桌面置顶透明可拖动倒计时闹钟 V4
- 设置窗口被关闭 → 主窗口同步关闭
"""
import tkinter as tk
from tkinter import ttk, colorchooser, messagebox
from datetime import datetime, timedelta
import threading
import time
class DesktopAlarm(tk.Tk):
def __init__(self):
super().__init__()
self.overrideredirect(True)
self.attributes("-topmost", True)
self.attributes("-transparentcolor", "white")
self.configure(bg="white")
self.resizable(False, False)
self.geometry("+200+150")
# 拖动支持
self._drag = False
self.bind("<Button-1>", self._start_drag)
self.bind("<B1-Motion>", self._on_drag)
# 显示标签
self.label = tk.Label(
self,
text="00天 00时 00分 00秒",
font=("Segoe UI", 36, "bold"),
fg="black",
bg="white",
anchor="center"
)
self.label.pack()
# 用户配置
self.event_text = ""
self.font_size = 36
self.text_color = "black"
self.get_input()
threading.Thread(target=self.countdown, daemon=True).start()
# ---------- 拖动 ----------
def _start_drag(self, event):
self._drag = True
self._x = event.x
self._y = event.y
def _on_drag(self, event):
if self._drag:
x = self.winfo_x() + event.x - self._x
y = self.winfo_y() + event.y - self._y
self.geometry(f"+{x}+{y}")
# ---------- 输入 ----------
def get_input(self):
inp = tk.Toplevel(self)
inp.title("设置倒计时")
inp.resizable(False, False)
inp.attributes("-topmost", True)
inp.grab_set()
# ★ 关键:设置窗口被关闭 → 主窗口一起退出
inp.protocol("WM_DELETE_WINDOW", lambda: self.destroy())
# 时间
frm_time = ttk.LabelFrame(inp, text="倒计时", padding=10)
frm_time.pack(fill="x", padx=10, pady=5)
vars = [tk.IntVar(value=0) for _ in range(4)]
titles = ["天", "小时", "分钟", "秒"]
for idx, t in enumerate(titles):
ttk.Label(frm_time, text=t).grid(row=0, column=idx*2, padx=5)
ttk.Spinbox(frm_time, from_=0, to=999, textvariable=vars[idx], width=5).grid(row=0, column=idx*2+1, padx=5)
# 事件文本
frm_txt = ttk.LabelFrame(inp, text="事件文本(计时结束显示)", padding=10)
frm_txt.pack(fill="x", padx=10, pady=5)
txt_var = tk.StringVar(value="")
ttk.Entry(frm_txt, textvariable=txt_var, width=30).pack(fill="x")
# 字体大小
frm_font = ttk.LabelFrame(inp, text="字体大小", padding=10)
frm_font.pack(fill="x", padx=10, pady=5)
size_var = tk.IntVar(value=36)
ttk.Spinbox(frm_font, from_=10, to=200, textvariable=size_var, width=5).pack(side="left")
# 颜色选择
def choose_color():
c = colorchooser.askcolor(self.text_color)[1]
if c:
self.text_color = c
btn_color.config(bg=c)
btn_color = tk.Button(frm_font, text="文字颜色", command=choose_color, bg=self.text_color, width=10)
btn_color.pack(side="left", padx=10)
def ok():
d, h, m, s = [v.get() for v in vars]
self.total_seconds = d*86400 + h*3600 + m*60 + s
if self.total_seconds <= 0:
messagebox.showerror("错误", "至少输入一个非零值!")
return
self.event_text = txt_var.get().strip()
self.font_size = size_var.get()
self.label.config(font=("Segoe UI", self.font_size, "bold"), fg=self.text_color)
inp.destroy()
ttk.Button(inp, text="开始", command=ok).pack(pady=10)
self.wait_window(inp)
# ---------- 倒计时 ----------
def countdown(self):
end = datetime.now() + timedelta(seconds=self.total_seconds)
while datetime.now() < end:
left = int((end - datetime.now()).total_seconds())
self.show_left(left)
time.sleep(0.1)
self.show_left(0)
self.alarm()
def show_left(self, seconds):
d, rem = divmod(seconds, 86400)
h, rem = divmod(rem, 3600)
m, s = divmod(rem, 60)
txt = f"{d:02d}天 {h:02d}时 {m:02d}分 {s:02d}秒"
self.label.config(text=txt)
# ---------- 闹钟 ----------
def alarm(self):
display_txt = self.event_text if self.event_text else "时间到!"
self.label.config(text=display_txt, fg="white")
self.switch_color()
self.label.bind("<Double-1>", lambda e: self.destroy())
def switch_color(self):
now = self.label.cget("fg")
nxt = "red" if now == "white" else "white"
self.label.config(fg=nxt)
self.after(1000, self.switch_color)
if __name__ == "__main__":
DesktopAlarm().mainloop()
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)