最近视力一直低迷
去年准备法考和联考之后视力就一直不行
我很需要一个:(小声giaogiao)
电脑版 强提醒 的番茄时钟了!
代码没有交互界面,主要是我喜欢simple的,同时,一个优美的UI费时费力。但是现在的状态在编译和修改参数的过程中就比较麻烦。现在主要用户也就只有我和女朋友两个人(现在还有一个师姐),要是用的人多,设计一个漂亮的交互界面还是蛮有必要的 |
为什么要做一个这样的东西?而不用手机上的?
Reason:
1.我工作的时候手机不是经常放在身边,会放到教室的手机袋里,保持专注
2.如果用手机的番茄钟的话,经常会导致在开关番茄钟的时候就去看手机,浪费时间
3.手机番茄钟的界面不简洁,太复杂了
主要实现功能如下:
1.我的休息参数是【25min工作+2min休息】
(放松眼睛,时间一到就会有弹窗置顶提醒)
2.在休息的过程中为了防止一直盯着电脑,设置了:
1)开始休息的蜂鸣低音
2)结束休息的蜂鸣高音
3.我在使用电脑的时候,为了防止忽然喇叭大声叫出来导致
|
所以我在使用电脑的大部分时间,都是保持蜂鸣器关闭状态
,这样蜂鸣器没法发出声音
,这时候就绪要一个能:
1.读取蜂鸣器状态,
2.改变状态,
3.发出声音,
4.返回原有状态的代码
说到社会性死亡,我就来劲了😋,又到了每篇必有的二次元宅舞
推荐时间,但是我这次不想推荐二次元宅舞,我要推荐的是,陈冠希代言的绝对伏特加广告
别怕失败,大不了,从头来过。你懂的。
Bilibili链接:陈冠希 ABSOLUT(绝对伏特加)
具体设计部分:
{需要的包如下}:
# coding=utf-8
from time import sleep
from easygui import buttonbox
from winsound import Beep
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
1.蜂鸣器部分代码
def changeVolume(db):
mute = volume.GetMute() #查看是否静音
if 1==mute: #这里的Flag是用来确认我们是否静音的状态
flag=True #类似操作系统课学的‘烤面包机’概念
else:
flag=False
if 1==mute:
volume.SetMute(0,None) #设置静音
flag=True
vr = volume.GetMasterVolumeLevel()
volume.SetMasterVolumeLevel(-4.504, None) #设置
Beep(db, 200) #两个参数代表音高(频率)和时长
sleep(0.4) #睡0.4s,十分关键
volume.SetMasterVolumeLevel(vr, None) #回到之前设置的值
if True==flag:
volume.SetMute(1, None)
flag=False
有趣的是,在我使用volume.SetMute(0,None)这个函数的时候,Pycharm没有提示我有这个函数,但是我把这个东西猜出来了。。。
如果相对 检测系统音量 还有疑问的话,可以看一下这一篇博客,老哥的代码写的很好,有点像Arduino的示例代码了,很不错:
上链接
python获取windows当前音量值以及调节音量(pycaw模块)
2.EasyGUI弹窗部分(我选用的是buttonbox)
while True:
choicess_list1=['Take a rest','Shut down']
title1 = 'FILAgiao休息2min'
# img1 = r'H:\tsts\pp\haitan1.jpeg'
msg1 = '25分钟到了,休息一下做以下几件事\n\n1.看向窗外,放松身心\n\n2.转眼,按摩眼睛\n\n3.过去25分钟做了什么?下一个25分钟要做什么?\n'
changeVolume(400) #上文中定义的函数
g=buttonbox(title=title1,msg=msg1,choices=choicess_list1)
if 'Shut down'==g:
break #一直循环就可以,就不用die()这种会加大包容量的东西了
else:
sleep(120)
#
title2 = '开始工作&高效率!'
choicess_list2 = ['Start working!', 'Shut down']
msg2 = '开始工作!\n\n爱你小小鱼😘!'
img2 = r'H:\tsts\pp\elon1.jpg' #放一手偶像Elon的照片
changeVolume(700)
k=buttonbox(title=title2,msg=msg2,image=img2,choices=choicess_list2)
if 'Shut down'==k:
break
else:
sleep(1500)
这里使用了Buttonbox
作为我的弹窗,对是否还要继续进行工作&或者是休息进行反馈,工作的话就是点击工作(或者休息)按钮,反之就点击shut down按钮
在你设置了两个参数
之后,我的东西就开始工作了,如果需要调整时间的话,就修改上面的代码中的这两个参数
sleep(120)
sleep(1500)
#我的休息参数是【25min工作+2min休息】,女友是【45,15】
最后,可以在你的弹出的弹窗中设置一张照片,你的电脑的exe上可以看到,但是如果需要在打包之后的exe给别人,将这张照片搞上去的难度还是有点大,有点繁琐。根据“二八原则”
,没必要做的十全十美,这就算了。
(因为pyinstaller不是很会,我打的包有点大)
***(由于路径没有变化的原因,在自己的电脑上,打包过图片还是可以使用的)***请看后面,此问题已解决,让对方的电脑上也创建一个相同的文件夹,放一张相同命名的照片就可以了
打包的代码👇
//////////////////////////////////////////////
pip install pyinstaller [-i 有必要的话可以加个源]
//////////////////////////////////////////////
pyinstaller -F -w eye_protection.py
//////////////////////////////////////////////
-w是没有控制台,因为尽量简单,就没做输入,就不需要控制台了
所以女仔的版本是没有Elon Musk的,她也不是很喜欢Musk🐷
最后,如果需要的话,可以设置成为开机自启动,将生成的exe放到我的电脑这个文件夹中就可以了!
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
或者%programdata%\Microsoft\Windows\Start Menu\Programs\Startup 二选一
Warning:如果开机重启之后发现程序还是在自启动,但是那个文件夹里的东西没了,不要再去存一遍!这个文件夹的工作机制就是自动隐藏的!
如果多存了,可以到任务管理器------启动中找到这个EXE process,右键打开文件夹,删除就可以了
(好离谱,怎么现在又会有了23333)
最近有点忙,本来不应该花时间做这个东西了,但是还是护眼任务紧急,得搞一个这个,这个月还是要保持高效率啊,马上要出联考成绩了,有点紧张。。。
不过问题不大,相信自己,紧张也没用,只不过是换一条路得问题,也没啥好说了,向伟大得Elon Musk 致敬,向美丽的小小鱼同志致敬。Salute!
🅸 🅰🅼 🅵🅸🅻🅰🅶🅸🅰🅾😝
//我是分割线/
在后来的日子里我也觉得有点难用,师姐
问我能不能再做一个比较顺手的,后来也对代码进行了修改,大概就是以下功能:
主要就是以上几个功能,就是对一些参数进行了修正和更改,不知道最后用起来怎么样,后续也可以继续改进,接下来上代码:
# coding=utf-8
from time import sleep
from easygui import buttonbox,choicebox
from winsound import Beep
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))
def changeVolume(db):
mute = volume.GetMute()
if 1==mute:
flag=True
else:
flag=False
if 1==mute:
volume.SetMute(0,None)
flag=True
vr = volume.GetMasterVolumeLevel()
volume.SetMasterVolumeLevel(-4.504, None)
Beep(db, 200)
sleep(1)
volume.SetMasterVolumeLevel(vr, None)
if True==flag:
volume.SetMute(1, None)
flag=False
flag=-1
while True:
if -1==flag:
first='需要蜂鸣器提醒吗?\n(如果用了提醒可能会导致听歌啥的时候声音有点大)'
first0='程序初始化设置'
choicess_list0 = ['需要', '不要','不干了']
giao = buttonbox(title=first0, msg=first, choices=choicess_list0)
if giao=='需要':
flag=1
elif giao=='不要':
flag=0
else:
break
#
title2 = '开始工作&高效率!'
choicess_list2 = ['25+2', '45+5','不干了']
msg2 = '开始工作!\n\n加油!'
# img2 = r'H:\tsts\pp\elon1.jpg'
if flag==1:
changeVolume(600)
k=choicebox(title=title2,msg=msg2,choices=choicess_list2)
if '不干了'==k:
break
elif '25+2'==k:
sleep(1500)#1500
else:
sleep(2700)#2700
choicess_list1 = ['Take a rest', '不干了']
title1 = '斐乐同学的番茄时钟'
# img1 = r'H:\tsts\pp\haitan1.jpeg'
msg1 = '时间到了,休息一下做以下几件事\n\n1.走动一下,看向窗外,放松身心\n\n2.转转眼,按摩眼睛\n\n3.这段时间做了什么?下段时间要做什么?\n'
if flag==1:
changeVolume(400)
g = buttonbox(title=title1, msg=msg1, choices=choicess_list1,image='D:/FILAgiao/xiuxi.jpg')
if '不干了' == g:
break
elif '25+2' == k:
sleep(120)#120
else:
sleep(300)#300
导入图片之问
我目前还不知道怎么直接把图片打包到exe里面,但是如果用文件位置的话,却可以很好的导入,并且保证对方有最够的修改的可能。但是有一个问题就是,许多人的图片不是很合适,对于这种弹窗来说可能太大了,我们可以通过写一个改变图片大小的文件,changesize.py来实现改变文件的大小,方便师姐使用帅哥照片当弹窗背景。
上代码:
# coding=utf-8
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by victor
# 本模块的功能:<更改图片尺寸>
import os
import os.path
from PIL import Image
import easygui
'''
filein: 输入图片
fileout: 输出图片
width: 输出图片宽度
height:输出图片高度
type:输出图片类型(png, gif, jpeg...)
'''
def ResizeImage(img, fileout, width, height, type):
out = img.resize((width, height),Image.ANTIALIAS)
#resize image with high-quality
out.save(fileout)
if __name__ == "__main__":
filein = easygui.fileopenbox()
filein.replace('\\','/')
# for i in range(len(filein)):
# if filein[-i-2]=='\\':
# filein=filein[-i-2,:]
giao=filein.split('\\')
fileout='\\'.join(giao[:-1])+'\\xiuxi.jpg'
img = Image.open(filein)
w = img.width # 图片的宽
h = img.height # 图片的高
xm=0
for i in range(1000):
if w/(i+1) <500 or h/(i+1)<300:
xm=i+1
break
width= int(w/xm)
height=int(h/xm)
type =filein.split('.')[-1]
ResizeImage(img, fileout, width, height, type)
enjoy your coding
i am filagiao