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

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一起,每天不一样!

相关推荐
Rust研习社13 小时前
组合真的优于继承吗?为什么 Rust 和 Go 都拥抱组合舍弃继承?
后端·rust·编程语言
IT_陈寒13 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
CaffeinePro14 小时前
Pydantic深度使用:数据校验、枚举、ORM映射
后端·fastapi
Chenyiax14 小时前
从 Chat 到 Responses:OpenAI API 抽象为什么变了?
后端
MariaH14 小时前
Koa和Express的区别
后端
MariaH15 小时前
Koa框架的使用
后端
luckdewei16 小时前
那个用 passlib 做认证的新同事,上线第一天就把用户密码写进了日志
后端
ping某17 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
JustHappy17 小时前
我汇总了身边朋友的经历才发现,其实第一份实习是最难找的......
前端·后端·面试
uhakadotcom17 小时前
在python 的 工程化架构中 ,什么是 薄包装器层?
后端·面试·github