用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基础教程之类class定义使用方法
Feb 20 Python
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
python的类方法和静态方法
Dec 13 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
python3个性签名设计实现代码
Jun 19 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
Apr 03 Python
python 在某.py文件中调用其他.py内的函数的方法
Jun 25 Python
简单了解python的内存管理机制
Jul 08 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
python 实现IP子网计算
Feb 18 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标签云的实现代码
2012/10/10 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
微信小程序开发探究
2016/12/27 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
javascript 封装Date日期类实例详解
2017/05/28 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
高中数学教师求职信
2013/10/30 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
横幅标语大全
2014/06/17 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python