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 相关文章推荐
python生成器表达式和列表解析
Mar 10 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
Python实现针对给定单链表删除指定节点的方法
Apr 12 Python
python 除法保留两位小数点的方法
Jul 16 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
Django保护敏感信息的方法示例
May 09 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
pandas中遍历dataframe的每一个元素的实现
Oct 23 Python
基于python求两个列表的并集.交集.差集
Feb 10 Python
python opencv通过按键采集图片源码
May 20 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的文章管理系统(一)
2006/10/09 PHP
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
js+css在交互上的应用
2010/07/18 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
python3中的md5加密实例
2018/05/29 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
基于Python正确读取资源文件
2020/09/14 Python
计算机专业推荐信范文
2013/11/20 职场文书
优秀实习自我鉴定
2013/12/04 职场文书
会计专业毕业生自荐信范文
2013/12/20 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
应届毕业生自荐书
2014/06/18 职场文书
找工作求职信
2014/07/07 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
任命通知范文
2015/04/21 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
学历证明范文
2015/06/16 职场文书
初中语文教学随笔
2015/08/15 职场文书