如何实现一个下班倒计时程序

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。

Hello伙伴们,好几天不见啦。最近也是晚上打球太累,加上一直在研究mybatis的多租户问题,简直是没有太多的精力了。正好周六的晚上有一点点的空隙,就是洗完澡之后,顿时觉得整个人轻松下来了。有伙伴跟我一样的感受吗?

话不多说,现在我们来开始今天的主题:《如何实现一个桌面倒计时程序》。

身为打工人,一定是想着下班的那一刻吧。就像我昨天和我的伙伴开玩笑说:一个月就盼望着发工资的那一天。shigen找到了一段程序来实现下班倒计时,一起来看看实现的效果吧:

页面上动态的显示当前时间和剩余时间,假设shigen的文章要在今天的23点写完,那么我还剩2小时25分钟的准备时间。是不是挺神奇的,另外,还可以实现到点了自动关机。人走电脑关,看看老板还有什么理由让你去加班🤫🤫🤫。

那就上今天的代码吧:

ini 复制代码
 # -*- encoding: utf-8 -*-
 __date__ = '2023/11/18 19:27:08'
 ​
 """
 距离下班时间倒计时
 """
 ​
 import time
 from tkinter import *
 ​
 ​
 def refresh_current_time():
     """刷新当前时间"""
     clock_time = time.strftime('%Y-%m-%d %H:%M:%S')
     curr_time.config(text=clock_time)
     curr_time.after(1000, refresh_current_time)
 ​
 ​
 def refresh_down_time():
     """刷新倒计时时间"""
     # 当前时间戳
     now_time = int(time.time())
     # 下班时间时分秒数据过滤
     work_hour_val = int(work_hour.get())
     if work_hour_val > 23:
         down_label.config(text='小时的区间为(00-23)')
         return
     work_minute_val = int(work_minute.get())
     if work_minute_val > 59:
         down_label.config(text='分钟的区间为(00-59)')
         return
     work_second_val = int(work_second.get())
     if work_second_val > 59:
         down_label.config(text='秒数的区间为(00-59)')
         return
     # 下班时间转为时间戳
     work_date = str(work_hour_val) + ':' + str(work_minute_val) + ':' + str(work_second_val)
     work_str_time = time.strftime('%Y-%m-%d ') + work_date
     time_array = time.strptime(work_str_time, "%Y-%m-%d %H:%M:%S")
     work_time = time.mktime(time_array)
     if now_time > work_time:
         down_label.config(text='已过下班时间')
         return
     # 距离下班时间剩余秒数
     diff_time = int(work_time - now_time)
     while diff_time > -1:
         # 获取倒计时-时分秒
         down_minute = diff_time // 60
         down_second = diff_time % 60
         down_hour = 0
         if down_minute > 60:
             down_hour = down_minute // 60
             down_minute = down_minute % 60
         # 刷新倒计时时间
         down_time = str(down_hour).zfill(2) + '时' + str(down_minute).zfill(2) + '分' + str(down_second).zfill(2) + '秒'
         down_label.config(text=down_time)
         tk_obj.update()
         time.sleep(1)
         if diff_time == 0:
             # 倒计时结束
             down_label.config(text='已到下班时间')
             # 自动关机,定时一分钟关机,可以取消
             # down_label.config(text='下一分钟将自动关机')
             # os.system('shutdown -s -f -t 60')
             break
         diff_time -= 1
 ​
 ​
 # 程序主入口
 if __name__ == "__main__":
     # 设置页面数据
     tk_obj = Tk()
     tk_obj.geometry('400x280')
     tk_obj.resizable(0, 0)
     tk_obj.config(bg='white')
     tk_obj.title('倒计时应用')
     Label(tk_obj, text='下班倒计时', font='宋体 20 bold', bg='white').pack()
     # 设置当前时间
     Label(tk_obj, font='宋体 15 bold', text='当前时间:', bg='white').place(x=50, y=60)
     curr_time = Label(tk_obj, font='宋体 15', text='', fg='gray25', bg='white')
     curr_time.place(x=160, y=60)
     refresh_current_time()
     # 设置下班时间
     Label(tk_obj, font='宋体 15 bold', text='下班时间:', bg='white').place(x=50, y=110)
     # 下班时间-小时
     work_hour = StringVar()
     Entry(tk_obj, textvariable=work_hour, width=2, font='宋体 12').place(x=160, y=115)
     work_hour.set('18')
     # 下班时间-分钟
     work_minute = StringVar()
     Entry(tk_obj, textvariable=work_minute, width=2, font='宋体 12').place(x=185, y=115)
     work_minute.set('00')
     # 下班时间-秒数
     work_second = StringVar()
     Entry(tk_obj, textvariable=work_second, width=2, font='宋体 12').place(x=210, y=115)
     work_second.set('00')
     # 设置剩余时间
     Label(tk_obj, font='宋体 15 bold', text='剩余时间:', bg='white').place(x=50, y=160)
     down_label = Label(tk_obj, font='宋体 23', text='', fg='gray25', bg='white')
     down_label.place(x=160, y=155)
     down_label.config(text='00时00分00秒')
     # 开始计时按钮
     Button(tk_obj, text='START', bd='5', command=refresh_down_time, bg='green', font='宋体 10 bold').place(x=150, y=220)
     tk_obj.mainloop()

代码就是简简单单的204行,要实现到点自动关机的伙伴可以把63-64行的代码注释打开即可。

那最后总结一下吧,为什么shigen会选取这个程序作为今天的分享呢?

  1. 跨平台。首先python是跨平台的,其次tkinter也是跨平台的,意味着在常见的操作系统都可以执行这个代码,实现倒计时的效果;
  2. 新思路。其实shigen之前也做了一个类似的桌面时钟效果,做的更加酷炫一点的话,其实可以当作屏保了;
  3. 小工具的改造。其实shigen的mac上也有很多的小工具,但是都是在命令行执行的,改在了GUI界面岂不是更加的nice和方便,也实现傻瓜式操作。

以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注支持一下哈,您的鼓励和支持将是shigen坚持日更的动力。同时,shigen在多个平台都有文章的同步,也可以同步的浏览和订阅:

平台 账号 链接
CSDN shigen01 shigen的CSDN主页
知乎 gen-2019 shigen的知乎主页
掘金 shigen01 shigen的掘金主页
腾讯云开发者社区 shigen shigen的腾讯云开发者社区主页
微信公众平台 shigen 公众号名:shigen

shigen一起,每天不一样!

相关推荐
追逐时光者3 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_3 小时前
敏捷开发流程-精简版
前端·后端
苏打水com3 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧4 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧4 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧4 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧4 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧5 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng6 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端
烙印6016 小时前
Spring容器的心脏:深度解析refresh()方法(上)
java·后端·spring