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 相关文章推荐
Python3实现Web网页图片下载
Jan 28 Python
使用rst2pdf实现将sphinx生成PDF
Jun 07 Python
python 链接和操作 memcache方法
Mar 04 Python
Python Socket编程详细介绍
Mar 23 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
Python创建或生成列表的操作方法
Jun 19 Python
python3实现单目标粒子群算法
Nov 14 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
Python基于百度AI实现抓取表情包
Jun 27 Python
Python OpenCV实现图像模板匹配详解
Apr 07 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
php实现的MySQL通用查询程序
2007/03/11 PHP
用PHP与XML联手进行网站编程代码实例
2008/07/10 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
jQuery实现跨域
2015/02/03 Javascript
javascript运动详解
2015/07/06 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
python计算文本文件行数的方法
2015/07/06 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
pymongo中group by的操作方法教程
2019/03/22 Python
Python Process多进程实现过程
2019/10/22 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
python xlsxwriter模块的使用
2020/12/24 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
党员干部承诺书
2014/03/25 职场文书
出国英文推荐信
2014/05/10 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Java集成swagger文档组件
2021/06/28 Java/Android
关于Python中进度条的六个实用技巧分享
2022/04/05 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python