用Python做一个久坐提醒小助手的示例代码


Posted in Python onFebruary 10, 2020

不论是日常的工作还是学习,现代年轻人在电脑屏幕时长数据能让人惊掉下巴,继而引发一系列身体不适的现象。小李也是久坐族中的一员,为了时刻提醒自己起来活动活动,我开发了一款基于PythonGUI编程的久坐提醒小助手。

用Python做一个久坐提醒小助手的示例代码

整体设计

整体的构思类似于一个番茄时钟,提供一个倒计时功能并且在完成计时时发出警告。主要分为如下几个模块,一是时间选择模块,二是按钮模块,控制计时开始、暂停以及恢复,三是倒计时显示模块,并在倒计时完成之后发出警告。

用Python做一个久坐提醒小助手的示例代码

模块一

这一块主要是组合框的设计,并传递所选择时间的具体数值,非常简单。

label2=tkinter.Label(self.win,text='请选择时间间隔:').place(x=40,y=20)
    self.cv=tkinter.StringVar()
    self.com=ttk.Combobox(self.win,textvariable=self.cv)
    self.com.place(x=190,y=20)
    self.com['value']=("15分钟","30分钟","45分钟","60分钟")
    self.com.current(0)
    self.com.bind("<<ComboboxSelected>>", self.get_time)
        
  def get_time(self,event):

    self.minute=int(self.com.get()[:-2])

模块二

这一块主要是三个按键功能的设计,是软件的核心部分。实现的功能与按钮的名称完全一致,当选择了定时的时间,按下开始按钮时,触发倒计时的秒表,并实时显示;按下暂停之后需要暂停倒计时的计数;按下继续之后需要继续倒计时的计数。

用Python做一个久坐提醒小助手的示例代码

其中倒计时的计算,我是通过利用获取目标学习时长的数值加上当前时间计算得到最终计时完成的时间,本来是非常完美的,但是引入了暂停和继续开始这两项功能之后需要做出一定程度的改进,那就是倒计时的计算需要补充暂停的时长。

button=tkinter.Button(self.win,text="开始",command=self.alarm,width=6,height=1)
    button.place(x=40,y=60)
    button2=tkinter.Button(self.win,text="暂停",command=self.pause,width=6,height=1)
    button2.place(x=180,y=60)   
    button3=tkinter.Button(self.win,text="继续",command=self.go_on,width=6,height=1)
    button3.place(x=320,y=60) 
        
  def alarm(self):
    
    self.now=datetime.datetime.now()
    delta=datetime.timedelta(minutes=self.minute)
    self.target=self.now+delta
    self.win.after(0,self.update)
    
  def pause(self):
    
    self.pause_time=datetime.datetime.now()
    self.flag=True
    self.win.after_cancel()
    
  def go_on(self):
    
    self.go_on_now=datetime.datetime.now()
    self.pause_long=self.go_on_now-self.pause_time+self.pause_long
    self.flag=False
    self.win.after(0,self.update)

模块三

把这个倒计时显示模块放置于最醒目的位置,并在完成当前计时时发出警告的消息。核心便是下面的update函数,实现倒计时的实时更新。

用Python做一个久坐提醒小助手的示例代码

def update(self):
    
    now=datetime.datetime.now()
    countdown=self.target-now+self.pause_long
    self.label=tkinter.Label(self.win,text=str(countdown)[:7],font=("黑体",70))
    self.label.place(x=60,y=130)
    if str(countdown)[:7]=='0:00:00':
      tkinter.messagebox.showwarning(title="FBIWarning",message="您已工作{}分钟,请马上离开座位休息片刻!".format(self.minute))
      self.flag=True
      self.win.after_cancel()
    if self.flag==False:
      self.win.after(1,self.update)

最后,希望大家在工作学习之中,经常站起来活动活动筋骨,放松放松大脑,多呼吸新鲜的空气,毕竟身体才是革命的本钱!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python检测服务器是否正常
Feb 16 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
python 通过logging写入日志到文件和控制台的实例
Apr 28 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
Python队列RabbitMQ 使用方法实例记录
Aug 05 Python
浅谈pycharm使用及设置方法
Sep 09 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
python基于opencv实现人脸识别
Jan 04 Python
Python基础学习之奇异的GUI对话框
May 27 Python
Python3 元组tuple入门基础
Feb 09 #Python
Python3列表List入门知识附实例
Feb 09 #Python
Python 动态变量名定义与调用方法
Feb 09 #Python
python函数定义和调用过程详解
Feb 09 #Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 #Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 #Python
Python文件操作方法详解
Feb 09 #Python
You might like
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
js 走马灯简单实例
2013/11/21 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
使用cx_freeze把python打包exe示例
2014/01/24 Python
Python3.6正式版新特性预览
2016/12/15 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
苹果香港官方商城:Apple香港
2016/09/14 全球购物
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
新学期校长寄语
2014/01/18 职场文书
技术负责人任命书
2014/06/05 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
教师先进事迹材料
2014/12/16 职场文书
2015年宣传工作总结
2015/04/08 职场文书
入伍通知书
2015/04/23 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang