定时锁屏程序,Python祝你原理猝死!
高以翔事件
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 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图标,来看看效果吧:
定时锁屏程序,Python祝你原理猝死!的更多相关文章
- Android4.0+锁屏程序开发——按键屏蔽篇
开发锁屏程序的时候我们要面临的重要问题无疑是如何屏蔽三个按键,Back,Home,Menu 看似简单的功能,实现起来却并不是那么容易. [屏蔽Back按键] 相对来说,屏蔽Back键是比较简单的,只 ...
- Android4.0+锁屏程序开发——设置锁屏页面篇
[如何开发一个锁屏应用] 想要开发一个锁屏应用,似乎很难,其实并没有想象中那么难. 从本质上来说,锁屏界面也只是一个Activity而已,只是这个界面比较特殊,在我们点亮屏幕的时候,这个界面就会出现. ...
- C# .NET锁屏程序(顺带屏蔽任务管理器)
原文:C# .NET锁屏程序(顺带屏蔽任务管理器) 第一步:将窗体的FormBorderStyle设置为none,WindowState设为Maximized 占据整个屏幕. 第二步:使用钩子监控全局 ...
- 【python】定时锁屏,保护身体
前言 最近越来越懒,一上班坐到电脑前就不愿意动,不喝水也不起来走动,一下班离开电脑就头晕眼花.想起前两年被肾结石支配的恐惧o(╥﹏╥)o,,,还是写个小工具强制自己喝水防止复发吧.VS Code启动 ...
- windows 设置定时锁屏
设置间隔指定时间电脑自动锁屏 CreateTime--2017年7月3日10:16:14Author:Marydon 参考地址:电脑爱好者杂志 举例:实现每间隔45分钟,电脑自动锁屏 实现思路: ...
- Android定时锁屏功能实现(AlarmManager定时部分)
菜鸟入坑记——第一篇 关键字:AlarmManager 一.AlarmManager简介: 参考网址:https://www.jianshu.com/p/8a2ce9d02640 参考网 ...
- Winfrom 定时锁屏
#region 锁屏 public struct LASTINPUTINFO { [MarshalAs(UnmanagedType.U4)] public int cbSize; [MarshalAs ...
- 写一个小程序实现win系统定时锁屏
貌似很久没写程序了,随便用C语言实现吧 #include<stdio.h> #include<stdlib.h> int main(){ system("rundll ...
- Mac 如果一定要写个锁屏程序的话就这样
package test; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import ...
随机推荐
- Redis和MongoDB区别
MongoDB 更类似 MySQL,支持字段索引.游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务.Redis 是一个开源(BSD许可)的,内存中的数据结 ...
- 关于eclipse创建的[传统web项目][传统maven项目][maven-web项目][springboot项目]目录结构
总体比较 [传统web项目] [传统maven项目] [maven-web项目] [springboot项目] 本文摘至https://blog.csdn.net/qq_42747738/articl ...
- Springboot异常处理和自定义错误页面
1.异常来源 要处理程序发生的异常,首先需要知道异常来自哪里? 1.前端错误的的请求路径,会使得程序发生4xx错误,最常见的就是404,Springboot默认当发生这种错误的请求路径,pc端响应的页 ...
- table-layout:fixed
table-layout: fixed; 在table上设置上面属性后,如果不设置td的宽度,那么所有td的宽度平分总table宽度.如果设置了td的宽度,则以设置的宽度为准. table-layou ...
- Spring Cloud Gateway、并发编程等等
2019年 JUC线程池服务ExecutorService接口实现源码分析 Github Page:http://www.throwable.club/2019/07/27/java-concurre ...
- 利用Python制作一个只属于和她的聊天器,再也不用担心隐私泄露啦!
------------恢复内容开始------------ 是否担心微信的数据流会被监视?是否担心你和ta聊天的小秘密会被保存到某个数据库里?没关系,现在我们可以用Python做一个只属于你和ta的 ...
- http请求post,文件导出兼容IE10+
1.post的方法里要加responseType: 'blob'参数,不然下载的excel会乱码 2.使用{type: "application/vnd.ms-excel"}的写法 ...
- ES6-数字操作,判断是否是整数,判断最大值最小值
S中只有一种类型数,即64位(1bit 的符号位,11bits 的指数部分 ,以及52bits 的小数部分)双精度浮点数,当整数数值过大时,就会发生精度丢失. 所谓安全整数即能够唯一确定的数字,即能够 ...
- latex初步入门:springer llncs
最近写一篇论文呢,使用到了latex,记录一下吧. 使用的是标准 : springer 的llncs类 核心:使用官方的samplepaper.tex基础上进行修改 这个是最快上手,也是最快能码出一篇 ...
- QT总结
作为一个QT(C++/linux/windows)开发工程师,把自己在工作中遇到的一些QT问题持续总结给大家,一起分享: 一.隐藏鼠标:QApplication::setOverrideCursor( ...