python基于tkinter制作下班倒计时工具


Posted in Python onApril 28, 2021

你有过摸鱼时间吗

在互联网圈子里,常常说996上班制,但是也不乏965的,更甚有007的,而007则就有点ICU的感觉了,所以,大家都会忙里偷闲,偶尔摸摸鱼,摸鱼的方式多种多样的,你有过上班摸鱼吗?你的摸鱼时间都干了些什么呢?如果你早早的完成了当天的任务,坐等下班的感觉是不是很爽呢?我想说这时间还是很难熬的,还不如找点事情做来得快呢,那做点什么呢?写个下班倒计时吧,就这么愉快的决定了……

实现思路

倒计时的时间刷新,肯定得需要图形界面,也就是需要GUI编程,这里我用的是tkinter实现本地窗口的界面,使用tkinter可以实现页面布局以及时间的定时刷新显示,而涉及到时间的操作,肯定少不了要用到time模块,这里我还加入了倒计时结束自动关机的功能(注释了的,有需要可以打开),所以还用到了os模块的system实现定时关机功能。

运行环境

Python运行环境:Windows + python3.8
用到的模块:tkinter、time、os
如未安装的模块,请使用pip instatll xxxxxx进行安装,例如:pip install tkinter

界面布局

先来看一下实现后的界面

python基于tkinter制作下班倒计时工具

从截图中可以看到,主要有三个信息:

  • 当前时间:这个是实时显示当前时间,格式为格式化的年月日时分秒
  • 下班时间:这个可以修改的,默认是18:00:00,可以根据自己的下班时间来修改
  • 剩余时间:这里是倒计时的剩余时间,点START后每秒刷新
# 设置页面数据
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()

定时刷新剩余时间

通过获取设置的下班时间,对比当前时间的时间差,从而得到剩余时间,再用while每秒循环处理剩余时间,并实时刷新到界面上,直至剩余时间为0程序才会结束,甚至操作电脑自动关机的功能。

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

完整代码

为了方便大家测试和顺利摸鱼,我把完整的倒计时程序也贴出来,大家有什么问题也可以及时反馈,想要了解更多的可以去交友网站github.com/gxcuizy上面找我哦

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
距离下班时间倒计时
author: gxcuizy
date: 2021-04-27
"""

from tkinter import *
import time
import os


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()

以上就是python基于tkinter制作下班倒计时工具的详细内容,更多关于python 倒计时工具的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
python3实现逐字输出的方法
Jan 23 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
Python简单基础小程序的实例代码
Apr 28 Python
python flask几分钟实现web服务的例子
Jul 26 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
python二维键值数组生成转json的例子
Dec 06 Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
k-means & DBSCAN 总结
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 #Python
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
python实现腾讯滑块验证码识别
Apr 27 #Python
python实现调用摄像头并拍照发邮箱
Apr 27 #Python
django如何自定义manage.py管理命令
Apr 27 #Python
You might like
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
关于JavaScript的一些看法
2009/05/27 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
js 判断数据类型的几种方法
2017/01/13 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
python中的协程深入理解
2019/06/10 Python
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
网络安全方面的面试题
2016/01/07 面试题
材料加工硕士生求职信
2013/10/10 职场文书
自考毕业生自我鉴定
2013/11/04 职场文书
大学毕业生的自我鉴定
2013/11/30 职场文书
期中考试后的反思
2014/02/08 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
2014年班组长工作总结
2014/11/20 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
Python中super().__init__()测试以及理解
2021/12/06 Python