Python快速打造极简桌面时钟 | Python+Tkinter桌面时钟工具制作指南

| 引言

在数字化时代,我们的时间管理越来越依赖于电子设备。一个简约而实用的桌面时钟工具,不仅能帮助我们更好地掌握时间,还能作为个性化装饰美化我们的工作空间。今天,我们将一起学习如何使用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的基本使用方法。这只是一个起点,你可以在此基础上添加更多功能,如日期显示、闹钟功能等,打造一个完全属于你自己的时间管理工具。现在就开始你的编程之旅吧!

"动手制作,享受编程带来的乐趣和成就感,让我们一起用代码美化生活!"


本文完,感谢阅读!

如果本篇文章对你有帮助,欢迎关注、点赞和转发,谢谢!

如果有任何问题或需要进一步交流,欢迎私信我或者在评论区留言讨论。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值