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 opencv之分水岭算法示例
Feb 24 Python
Python面向对象程序设计示例小结
Jan 30 Python
python实现动态创建类的方法分析
Jun 25 Python
详解python实现交叉验证法与留出法
Jul 11 Python
详解python中__name__的意义以及作用
Aug 07 Python
python Tensor和Array对比分析
Jan 08 Python
Python如何存储数据到json文件
Mar 09 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
哪些是python中web开发框架
Jun 17 Python
Python Matplotlib绘制条形图的全过程
Oct 24 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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 观察者模式的实现代码
2013/05/10 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
树结构之JavaScript
2017/01/24 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
python模糊图片过滤的方法
2018/12/14 Python
django 中QuerySet特性功能详解
2019/07/25 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
python drf各类组件的用法和作用
2021/01/12 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
html5 datalist标签使用示例(自动完成组件)
2014/05/04 HTML / CSS
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
介绍一下Linux文件的记录形式
2013/09/29 面试题
创建文明学校实施方案
2014/03/11 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
双拥工作宣传标语
2014/06/26 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫