猝死引发的讨论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, showinfo

import time

from 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 __init__(self):

self.countdown_lb = None

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.time_entry.config(state=DISABLED)

self.submit.config(state=DISABLED)

self.countdown_show(_float_countdown * 60)

except ValueError:

showwarning("提示:", message="请填写正确的倒计时!")

def countdown_show(self, countdown_sec):

while countdown_sec:

countdown_sec -= 1

time.sleep(1)

self.countdown_lb.config(text="休息倒计时:%02d:%02d" %

(countdown_sec // 60, countdown_sec % 60))

root.update()

# 为了避免突如其来的锁屏,倒计时10秒给出提示...

if countdown_sec == 10:

t = threading.Thread(target=self.notice)

t.start()

if countdown_sec < 1:

# 启动锁屏操作

close_windows()

time.sleep(3)

self.countdown_lb.config(text="欢迎主人回来...")

self.time_entry.config(state=NORMAL)

self.submit.config(state=NORMAL)

return

@staticmethod

def notice():

message = Toplevel(root)

message.wm_attributes('-topmost', 1)

center_window(message, 400, 200)

Label(message, text='主人,辛苦工作这么久了,准备休息下吧!'

, justify=CENTER, fg='red', font=("黑体", '15')).grid()

time.sleep(5)

message.destroy()

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()

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

如果大家喜欢,公众号内回复关键字:锁屏,即可获取代码及打包好的exe工具。快把这个暖心的小工具,分享给你身边的朋友们吧!

往期精彩回顾

python的危害_Python帮助万千程序员远离猝死悲剧相关推荐

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

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

  2. python 倒计时_用Python帮你远离猝死悲剧

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

  3. python视频教程唐学韬-顶级程序员的书单集

    你知道的越多,你不知道的越多 点赞再看,养成习惯 给岁月以文明,而不是给文明以岁月 前言 我们的一生其实也基本上都在学习,那提到学习,我第一时间想到的就是读书了. 记得帅丙在自己21岁的那个夏天,当时 ...

  4. Python爬取近十万条程序员招聘数据,告诉你哪类人才和技能最受热捧! | 原力计划...

    作者 | Huang supreme 编辑 | 郭芮 出品 | CSDN博客 图源 | 视觉中国 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于"数据&qu ...

  5. 评分9.7!这本Python书彻底玩大了?程序员:真香!

    「超级星推官/每周分享」是一个围绕程序员生活.学习相关的推荐栏目.CSDN出品,每周发布,暂定5期.关键词:靠谱!优质! 本期内容,我们将抽1人送出由我司程序员奉为"超级神作"的& ...

  6. Kotlin威胁、Python逆袭,2018年程序员需要升级哪些技能?(附报告下载)

    来源:CSDN 本文共6700字,建议阅读10分钟. 本文从App开发.Web开发.安全和系统管理.数据科学四大方面讲述了2018年开发者运用的工具和获得高薪的技能. [ 导读 ]近日,著名的技术书籍 ...

  7. Python 之父:救救中国程序员

    https://www.toutiao.com/i6677542632480047623/ 996.ICU 事件进一步发酵,继上个月在推特上评论 996 制度「违反人性」后,「Python 之父」Gu ...

  8. python 0o10_Python 从业十年的程序员,写的万字经验分享

    作者:laisky(基于 CC BY 4.0 授权许可) 原题:Python之路(内容略有调整) 来源:https://laisky.com/p/python-road 本文起源于我在 Twitter ...

  9. python平均工资-2019年我国程序员薪资统计,看看你出于什么水平?

    主要城市程序员工资 2019年9月北京招收程序员26430人.2019年9月北京程序员平均工资17224元,工资中位数15000元,其中95%的人的工资介于3750元到45000元. 2019年9月上 ...

最新文章

  1. React 开发环境搭建
  2. Base64加密解密算法的C/C++代码实现
  3. python opencv 如何检测模糊图像?自动判断模糊程度 cv2.Laplacian().var()
  4. 教你搭建Tiles工程-HelloTiles(附源码)
  5. iPhone比小米贵3000,贵在哪里?
  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(十)——一步一步教你如何撸Dapr之绑定...
  7. 有助提高效率的Web前端开发框架有哪些?
  8. 【转载】国产手机MTK平台MRP软件应用安装大全
  9. Silvaco TCAD 2017 在RedHat6.5 Linux系统的安装教程
  10. QQ是怎么实现通讯的
  11. r1音箱原生系统更改服务器,某讯R1音响——版本升级和安装DLNA细致教程
  12. libnet/libnids库函数介绍
  13. 普通本科菜菜海淘无人搭理,苦心闭关修炼一个月,出关后成功拿下阿里,蚂蚁金服,美团三个大厂意向书
  14. 什么样的人适合当软件工程师?
  15. php程序端的采集,php采集程序
  16. 网络规划和设计 - 关键路径法 CPM(关键路径、松弛时间)
  17. 中国各省人力资本测算就业人员受教育程度构成(2000-2021年)
  18. SAP系统 月结步骤
  19. 折腾两年裁了150人,谷歌才明白做游戏有多费钱
  20. cma linux 起始地址,CMA模块学习笔记

热门文章

  1. 想着干了 5 年 Android 开发,突然感觉自己啥也不会,内心疑惑:还要继续吗?
  2. php解析和风天气api,API爬取天气预报数据
  3. 新版 | 小O地图EXCEL版全新升级
  4. 挑战全网最详细靶机教程——vulnhub靶机实战vulnhub Tr0ll: 1【适合刚接触的新人学习】
  5. (一)jasmine
  6. 前端 JavaScript 原型和原型链
  7. v8系统计算机怎么安装到桌面,如何在Ubuntu 14.04上安装轻量级的Budgie桌面(v8)
  8. 2022RHCE最新认证—(满分通过)
  9. python返回列表中特定元素对应的索引
  10. win10连接手机热点显示“无Internet,安全“解决办法