高以翔事件

11月27日在《追我吧》第九期节目的录制过程中,当期参与嘉宾高以翔奔跑时突然减速倒地,节目现场医护人员第一时间展开救治,并紧急将其送往医院。经过两个多小时的全力抢救,医院最终宣布高以翔心源性猝死

此不幸事件发生后,得到了社会各界密切关注。从影迷的惋惜,到对节目组的声讨,以及各种死因分析报道,网上新闻铺天盖地。然而,如果论猝死率最高的职业,不该是我们程序员吗?

猝死高危职业

每年因加班猝死的程序员数以万计,但请问社会同仁是否对我们如此重视过,国家又可曾出台过相关的政策来保护这类高危人群?都没有!!!

很累的时候,有人关心你,安慰你,是你的幸运。
如果幸运没有降临到你头上,你要学会用自己的左手温暖自己的右手,
你要告诉自己,一切都会过去的。

既然他人不关心程序员,我们只能学会自我关怀了。今天我们就用Python来帮助万千程序员远离猝死!

久坐伤身

记得小米手环第一代发售的时候,就出了久坐提醒这个功能。“久坐”对人身的危害,早被世界所公认。具体有哪些呢?久坐会危害你的结肠、腰椎、颈部、心脏、胰腺、臀部、腿部。至于具体内容,大家可以下来仔细看看。
如此多的危害摆在面前,程序员们却经常因为赶需求、改BUG、查资料而一坐就是几个小时,不到尿憋不挪窝。(就在我写这篇文章的时候,已经在电脑边连续坐了三个小时了…)详细想想,你们是否也有过这些经历!
那么,今天我们用Python开发一个久坐提醒小工具,让每个程序员都能合理休息,定时起身走动走动,远离猝死危害!

程序设计

Python该如何完成久坐提醒这个功能呢?起初考虑定时发邮件、或者微信消息、短信等操作。但专注起来那里有时间关心这些?最后想想,不如开发一个GUI工具,允许程序员设置倒计时,然后到时见电脑自动锁屏,强迫大家起来走走,放松放松。所以有了如下的效果:为了时间设置的范围全面,我添加了支持小数的方式,也是为了能方便录屏演示。
但是为了避免突如其来的锁屏,导致大家不适。所以会在锁屏前10秒给出弹窗提示。这样不至于太过突兀。可这个思路却引发了问题。tkinter的message会阻塞进程,用户不点击取消掉消息窗口,就无法继续执行。为了能使弹出提示消息的同时,继续倒计时读秒,我们需要引入threading和Toplevel的模块,创建一个子窗口,并等待3秒后销毁它。

def notice():    message = Toplevel(root)    message.title('提示')    Label(message, text='主人,工作这么久了,准备休息下吧!'          , justify=CENTER, font=("黑体", '11')).grid()    time.sleep(3)    message.destroy()

自动锁屏

熟悉bat脚本的童鞋都知道,bat中有shutdown 的命令,可以用来定时重启、关机,但却没有锁屏。查了很久没有结果,最终无奈只能通过pythonctypes模块调用windll,完成锁屏操作了,具体代码如下:

def close_windows():    user32 = windll.LoadLibrary('user32.dll')    user32.LockWorkStation()

代码与使用

# -*- coding: utf-8 -*-# @Author   : 王翔# @微信号   : King_Uranus# @公众号    : 清风Python# @GitHub   : https://github.com/BreezePython# @Date     : 2019/11/28 23:23# @Software : PyCharm# @version  :Python 3.7.3# @File     : CareForCoders.py

from tkinter import *from tkinter.messagebox import showwarning, showinfoimport timefrom ctypes import *import threading

# tkinter GUI工具居中展示def center_window(master, width, height):    screenwidth = master.winfo_screenwidth()    screenheight = master.winfo_screenheight()    size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2,                            (screenheight - height) / 2)    master.geometry(size)

# 锁定屏幕def close_windows():    user32 = windll.LoadLibrary('user32.dll')    user32.LockWorkStation()

class CareForCoders:    def user_setting(self):        note = LabelFrame(root, text="说明", padx=10, pady=10,                          fg="red", font=("黑体", '11'))        note.grid(padx=10, pady=2, sticky=NSEW)        index = Label(note, text='程序猿/媛们,久坐伤身请务必定时休息!')        index.grid()        lb = LabelFrame(root, text="定时设置(支持小数)", padx=10,                        pady=10, fg="red", font=("黑体", '11'))        lb.grid(padx=10, pady=2, sticky=NSEW)        self.time_entry = Entry(lb)        self.time_entry.grid(row=1, column=0)        unit = Label(lb, text="(单位:分)")        unit.grid(row=1, column=1, padx=5)

        self.countdown_lb = Label(text="休息倒计时:", justify=LEFT,                                  font=("黑体", '11'))        self.countdown_lb.grid(row=2)        self.submit = Button(root, text="启动", width=8,                             command=lambda: self.get_countdown(self.time_entry.get())                             )        self.submit.grid(row=3, column=0, pady=10)

    def get_countdown(self, countdown):        try:            _float_countdown = float(countdown)            if _float_countdown <= 0:                showwarning("提示:", message="倒计时必须为正数!")            else:                self.countdown_show(_float_countdown * 60)        except ValueError:            showwarning("提示:", message="请填写正确的倒计时!")

    def countdown_show(self, countdown_sec):        self.time_entry.config(state=DISABLED)        self.submit.config(state=DISABLED)        time.sleep(1)        self.countdown_lb.config(text="休息倒计时: %02d:%02d" %                                      (countdown_sec // 60, countdown_sec % 60))        root.update()        # 为了避免突如其来的锁屏,倒计时30秒给出提示...        if countdown_sec == 10:            t = threading.Thread(target=self.notice)            t.start()

        if countdown_sec 1:            # 启动锁屏操作            close_windows()            self.time_entry.config(state=NORMAL)            self.submit.config(state=NORMAL)            self.countdown_lb.config(text="欢迎主人回来...")            root.update()            return        countdown_sec -= 1        self.countdown_lb.after(1000, self.countdown_show(countdown_sec))

    @staticmethod    def notice():        # message = Toplevel(root)        # message.title('提示')        # Label(message, text='主人,工作这么久了,准备休息下吧!'        #       , justify=CENTER, font=("黑体", '11')).grid()        # time.sleep(3)        # message.destroy()        showinfo("提示",message='主人,工作这么久了,准备休息下吧!')

if __name__ == '__main__':    root = Tk()    center_window(root, 260, 200)    root.resizable(width=False, height=False)    root.title('久坐提醒 by:清风Python')    Main = CareForCoders()    Main.user_setting()    root.mainloop()

大家可以去我的github下载所有文章代码:           https://github.com/BreezePython既然我们要造福万千程序员,那么当然最好可以打包成exe工具,便于脱离环境传播了!使用命令pyinstaller -F -w -i love.ico CareForCoders.py进行打包
-F 打包成单个文件,-w 取消cmd窗口 -i 添加软件的ico图标,来看看效果吧:

留言打卡 DAY 24

今日的留言话题是:真是无所不能的python,今天随意打卡。关于留言打卡的规则可以参考 留言打卡送福利(点击链接查看详细打卡规则),请按照 昵称+天数(请以自己实际打卡的天数为准,如day1 or day2 or day3)+ 留言内容(不少于15字)的方式留言。

往期推荐:

小白学Flask第九天| 看看模板的那些事(一)

旧手机能拿来干什么有趣的事情?

《庆余年》值得一看吗?|Python告诉你谁在关注


编程面试题库

python 倒计时_用Python帮你远离猝死悲剧相关推荐

  1. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

  2. Python帮助万千程序员远离猝死悲剧

    猝死引发的讨论 11月27日在<追我吧>第九期节目的录制过程中,当期参与嘉宾高以翔奔跑时突然减速倒地,节目现场医护人员第一时间展开救治,并紧急将其送往医院.经过两个多小时的全力抢救,医院最 ...

  3. python的危害_Python帮助万千程序员远离猝死悲剧

    猝死引发的讨论11月27日在<追我吧>第九期节目的录制过程中,当期参与嘉宾高以翔奔跑时突然减速倒地,节目现场医护人员第一时间展开救治,并紧急将其送往医院.经过两个多小时的全力抢救,医院最终 ...

  4. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  5. excel python插件_利用 Python 插件 xlwings 读写 Excel

    Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...

  6. 网络安全用python吗_使用Python进行网络安全渗透——密码攻击测试器

    相关文章: 本篇将会涉及: HTTP 基本认证 对HTTP Basic认证进行密码暴力攻击测试 什么是HTTP 基本认证 HTTP基本认证(HTTP Basic Authentication)是HTT ...

  7. python 教学_「Python基础」一次就装好Python手把手装到好

    一.前言: 安装Python有两个主要的方法,视情况而定我两个都会用: (1)安装 Anaconda Anaconda像一个懒人包,安装它等于把Python安装好连同把Python大部分的套件也下载好 ...

  8. 动态照片墙 python 实现_利用python生成照片墙的示例代码

    这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...

  9. python字符串_(Python基础教程之七)Python字符串操作

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

最新文章

  1. SAP PP COR1事务里下达工单,保存时报错:No data was found for the input values
  2. 数组与指针的艺术--深入探索c/c++数组与指针的奥秘
  3. 1019:浮点数向零舍入
  4. 【计算机网络复习 数据链路层】3.6.2 以太网
  5. Mac下使用tree命令
  6. Madagascar编程的Makefile文件配置
  7. Qt总结之十八:总结
  8. Swift3数组编辑
  9. python py转exe逆向
  10. TTL与非门电路的工作原理
  11. ZincSearch轻量级全文搜索引擎入门到
  12. Solidity函数中pure、view、constant的用法
  13. Pycharm 用鼠标滚轮控制字体大小
  14. python函数编程1+(1+2)_《Python游戏编程快速上手》一2.1 一些简单的数学知识
  15. ASPICE简介及适用范围-亚远景科技
  16. 模糊集合和隶属度详解
  17. 第五十七篇 Django-CRM系统-1登录,注册,修改密码
  18. nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression
  19. python大气校正_sen2cor批量大气校正Sentinel2数据——python代码
  20. Linux Deepin 新增英国肯特大学镜像服务

热门文章

  1. 创新时代的管理:《创新赢天下》
  2. 从底层理解Python的执行
  3. 一步步部署SharePoint Workflow 2013
  4. C++操作windows注册列表
  5. [原创]某页网付费简历模板下载方法
  6. 雷林鹏分享:XML 命名空间
  7. Java范例集锦(一)
  8. 网易举办首届云创大会,优云软件助力司南战略
  9. Linux QtCreator 设置mingw编译器生成windows程序
  10. POJ 2488 A Knight's Journey (棋盘DFS)