| 引言
在数字化时代,我们的时间管理越来越依赖于电子设备。一个简约而实用的桌面时钟工具,不仅能帮助我们更好地掌握时间,还能作为个性化装饰美化我们的工作空间。今天,我们将一起学习如何使用Python和Tkinter库来制作一个简约的桌面时钟。
| 为什么选择Python+Tkinter?
-
Python:简洁易懂,上手快,功能强大。
-
Tkinter:Python的标准GUI库,无需额外安装,适合快速开发简单的桌面应用。
| 功能特点
-
实时显示当前时间和日期。
-
简约界面设计,不占用过多桌面空间。
-
仅需极少的系统资源,长时间运行也不会对电脑性能造成任何负担。
-
无需繁琐配置,只需按使用说明操作一次,即可永久轻松使用。
| 不想研究Python的朋友看这里
不需要任何编程基础,也不需要安装任何Python相关的软件和使用环境,只需要一个exe文件即可开始使用。
使用说明:
1. 简单使用:
-
双击exe文件即可,无需安装,桌面时钟将会出现在您的屏幕上。
2. 开机自启动:
-
右键点击exe文件,选择“创建快捷方式”。
-
打开我的电脑,在地址栏中输入shell:Startup并回车,跳转到启动文件夹
-
将刚刚创建的快捷方式移动到启动文件夹中。
-
完成以上三步,从此每次启动电脑,桌面时钟都会自动显示桌面时钟。
3. 关闭程序:
-
点击桌面时钟窗口,按Esc键即可关闭时钟程序。
| 想学习Python的朋友看这里
接下来,我们将使用Python中的`Pillow`库来实现WebP到JPG或PNG的转换。这不仅简单快捷,而且能够批量处理图片,极大地提高了效率。
1. 环境准备
-
Python环境(推荐Python 3.8及以上版本)。
-
Tkinter库(Python标准库,无需单独安装)。
2. 完整代码
from time import strftime
from tkinter import Tk, Frame, Label, StringVar
class DeskClock:
def __init__(self, root):
self.root = root
self.root.overrideredirect(True) # 隐藏窗口边框
self.root.wm_attributes("-transparentcolor", "gray99") # 设置透明背景色
self.running = True # 运行状态
def close_window(event):
# 关闭窗口函数
self.running = False
event.widget.quit() # 关闭窗口
self.root.bind('<Escape>', close_window) # 绑定Esc键关闭窗口
screen_width = self.root.winfo_screenwidth() # 获取屏幕宽度
screen_height = self.root.winfo_screenheight() # 获取屏幕高度
# 创建主框架
self.timeframe = Frame(self.root, width=screen_width, height=screen_height, bg="gray99")
self.timeframe.grid(row=0, column=0)
time_font = ("Raleway", 100) # 设置时间字体
date_font = ("Bahnschrift", 20) # 设置日期字体
time_var = StringVar() # 创建时间变量
date_var = StringVar() # 创建日期变量
# 参考位置1
time1_label = Label(self.timeframe, textvariable=time_var, fg="#FFFFFF", bg="gray99",
font=time_font) # 创建时间标签
time1_label.place(y=30, x=screen_width - 560, anchor="nw") # 设置时间标签位置
date1_label = Label(self.timeframe, textvariable=date_var, fg="#FFFFFF", bg="gray99",
font=date_font) # 创建日期标签
date1_label.place(y=190, x=screen_width - 360, anchor="nw") # 设置日期标签位置
def update_time():
time_var.set(value=strftime("%H:%M:%S")) # 更新时间
date_var.set(value=strftime("%A, %e %B %Y")) # 更新日期
self.root.update_idletasks() # 更新窗口
self.root.update() # 更新窗口
if self.running:
self.root.after(1000, update_time) # 循环调用update_time函数
else:
self.root.destroy() # 关闭窗口
update_time() # 调用update_time函数
self.root.mainloop() # 进入主循环
def main():
root = Tk()
DeskClock(root)
if __name__ == '__main__':
main()
如果想增加一些趣味性,可以增加下班倒计时和每隔一小时喝水提示等,完整代码如下:
from time import strftime
from tkinter import Tk, Frame, Label, StringVar
from datetime import datetime, time
def format_time(delta_time):
# 格式化输出
delta_time = int(delta_time.total_seconds())
hours, remainder = divmod(delta_time, 3600)
minutes, seconds = divmod(remainder, 60)
formatted_delta = '{:02}时{:02}分{:02}秒'.format(hours, minutes, seconds)
return formatted_delta
def check_weekday(now_datetime):
# 获取今天是星期几,weekday() 返回的值是 0 到 6,分别代表星期一到星期天
weekday = now_datetime.weekday()
# 根据星期几进行提示
if weekday == 5 or weekday == 6: # 5 是星期六,6 是星期天
return "今天是周末,请回家休息,身体是革命的本钱!"
else:
return "今天是工作日,加油工作!奋斗不止!"
def check_time(now_datetime):
# 定义下班时间的datetime对象,日期部分设为今天
off_datetime = datetime.combine(now_datetime.date(), time(17, 30, 00))
# 比较当前时间的datetime对象和下班时间的datetime对象
if now_datetime >= off_datetime:
# 如果当前时间大于等于下班时间,显示加班信息
overtime = now_datetime - off_datetime
return f"今日加班时长:{format_time(overtime)}"
else:
# 如果当前时间小于下班时间,显示剩余时间
remaining = off_datetime - now_datetime
return f"距离下班剩下:{format_time(remaining)}"
class DeskClock:
def __init__(self, root):
self.root = root
self.root.overrideredirect(True) # 隐藏窗口边框
self.root.wm_attributes("-transparentcolor", "gray99") # 设置透明背景色
self.running = True # 运行状态
def close_window(event):
# 关闭窗口函数
self.running = False
event.widget.quit() # 关闭窗口
self.root.bind('<Escape>', close_window) # 绑定Esc键关闭窗口
screen_width = self.root.winfo_screenwidth() # 获取屏幕宽度
screen_height = self.root.winfo_screenheight() # 获取屏幕高度
# 创建主框架
self.timeframe = Frame(self.root, width=screen_width, height=screen_height, bg="gray99")
self.timeframe.grid(row=0, column=0)
time_font = ("Raleway", 100) # 设置时间字体
date_font = ("Bahnschrift", 20) # 设置日期字体
off_duty_font = ("Raleway", 20) # 设置下班倒计时字体
time_var = StringVar() # 创建时间变量
date_var = StringVar() # 创建日期变量
tips_var = StringVar() # 创建提示信息变量
off_duty_var = StringVar() # 创建下班倒计时变量
center_var = StringVar() # 创建中央变量
# 参考位置1
time1_label = Label(self.timeframe, textvariable=time_var, fg="#FFFFFF", bg="gray99",
font=time_font) # 创建时间标签
time1_label.place(y=30, x=screen_width - 560, anchor="nw") # 设置时间标签位置
date1_label = Label(self.timeframe, textvariable=date_var, fg="#FFFFFF", bg="gray99",
font=date_font) # 创建日期标签
date1_label.place(y=190, x=screen_width - 360, anchor="nw") # 设置日期标签位置
tips_label = Label(self.timeframe, textvariable=tips_var, fg="#FFFFFF", bg="gray99",
font=off_duty_font) # 创建提示标签
tips_label.place(y=260, x=screen_width - 580, anchor="nw") # 设置提示标签位置
off_duty_label = Label(self.timeframe, textvariable=off_duty_var, fg="#FFFFFF", bg="gray99",
font=off_duty_font) # 创建下班倒计时标签
off_duty_label.place(y=300, x=screen_width - 520, anchor="nw") # 设置标签位置
center_label = Label(self.timeframe, textvariable=center_var, fg="#FFFFFF", bg="gray99",
font=("幼圆", 130)) # 创建中央大标签
center_label.place(y=500, x=660, anchor="nw") # 设置标签位置
def update_time():
time_var.set(value=strftime("%H:%M:%S")) # 更新时间
date_var.set(value=strftime("%A, %e %B %Y")) # 更新日期
# 获取当前时间的datetime对象,日期部分设为今天
now_datetime = datetime.now()
tip_text = check_weekday(now_datetime)
tips_var.set(value=tip_text) # 更新提示
off_duty_text = check_time(now_datetime)
off_duty_var.set(value=off_duty_text) # 更新计时
if off_duty_text == "距离下班剩下:00时00分05秒":
center_var.set(value="下班啦!!!")
else:
# 不论是上班时间,还是加班时间,每隔1小时提示一次喝水,并持续显示30秒
if strftime("%H:%M:%S").endswith("00:00"): # 判断是否为整点
center_var.set(value="请及时补水!") # 更新中央变量
elif strftime("%H:%M:%S").endswith("00:30"): # 持续显示30秒
center_var.set(value="") # 更新中央变量
if off_duty_text.startswith("今日加班") and center_var.get() != "请及时补水!":
center_var.set(value="")
self.root.update_idletasks() # 更新窗口
self.root.update() # 更新窗口
if self.running:
self.root.after(1000, update_time) # 循环调用update_time函数
else:
self.root.destroy() # 关闭窗口
update_time() # 调用update_time函数
self.root.mainloop() # 进入主循环
def main():
root = Tk()
DeskClock(root)
if __name__ == '__main__':
main()
3. 个性化定制
-
可以根据个人喜好,通过更改font参数,可以设置不同的字体和大小,以适应你的桌面风格。
-
可以根据个人喜好,修改place方法内的x、y坐标,调整时钟窗口在电脑桌面上的位置。
-
当然也可以修改字体的颜色等配置。
-
通过调整定时器的时间间隔(例如,使用self.root.after(500, update_time)),可以改变时间更新的频率。
-
也可以像上面的第二份代码一样,根据个人需求,增加一些额外的个性化定制。
| 结语
通过本教程,你不仅学会了如何制作一个简约的桌面时钟,还掌握了Python和Tkinter的基本使用方法。这只是一个起点,你可以在此基础上添加更多功能,如日期显示、闹钟功能等,打造一个完全属于你自己的时间管理工具。现在就开始你的编程之旅吧!
"动手制作,享受编程带来的乐趣和成就感,让我们一起用代码美化生活!"
本文完,感谢阅读!
如果本篇文章对你有帮助,欢迎关注、点赞和转发,谢谢!
如果有任何问题或需要进一步交流,欢迎私信我或者在评论区留言讨论。