用python写一个windows消息提醒小程序
作者:为谁_疯狂
上班时,由于自己经常coding到忘记时间,经常会一坐坐很久,搞的劳资腰都不好了,所以没事闲的写了个久坐提醒的小程序,文中有详细的代码示例,讲解的非常详细,感兴趣的朋友可以参考下
一、需求
上班时,由于自己经常coding到忘记时间,经常会一坐坐很久,搞的劳资腰都不好了,所以没事闲的写了个久坐提醒的小程序。
二、功能描述
能设置时间间隔,过了间隔时间windows发出提醒消息,能定制消息内容。
三、实现
用到的大概有,
python,
ttkbootstrap(bootstrap ui页面),
plyer(windows消息),
threading(多线程包)
实现代码(全):
import os import time import ttkbootstrap as ttk from ttkbootstrap.constants import * from ttkbootstrap.scrolled import ScrolledText from plyer import notification import threading # 线程开关 global a_true a_true = True # 线程 thread1 = None # 文本路径 path = 'd:/msg-notify.txt' # ~休息提醒~ def notify(v, w_t): global a_true while a_true: notification.notify( title='~温馨提示~', message=v, app_icon=None, timeout=100, ) wait_time = int(w_t) * 60 for i in range(wait_time): # 未到时间 就睡觉 if i != wait_time: if not a_true: print('~~判断~~', a_true) break time.sleep(1) # time.sleep(int(w_t))# * 60 pass def setup_frame(master): root = ttk.Frame(master, ) btn_frame = ttk.Frame(root, padding=(10, 10, 10, 10), border=10) btn_frame.pack(side=TOP, fill=BOTH) # 如果去掉fill,则变为居中了; 如果加side=LEFT 则纵向居中 txt1 = ttk.Entry(btn_frame, font=("微软雅黑", 10), ) # width=200, txt1.pack(side=LEFT, ) # 开启发送消息线程 def send_msg(): global thread1 global a_true if thread1 is not None: a_true = False thread1.join(1) thread1.is_alive() print('~~~停止线程1~~~', thread1.is_alive()) print('open_file_test') wait_time = txt1.get() value = text_area.get(1.0, 'end') thread1 = threading.Thread(target=notify, args=(value, wait_time,)) a_true = True thread1.start() # 等待线程结束 # thread1.join() print('~~~开启线程~~~') # 停止提醒线程 def stop_msg(): global thread1 if thread1 is not None: global a_true a_true = False thread1.join(1) print('~~~停止线程2~~~') btn_1 = ttk.Button(btn_frame, text="开始提醒", command=send_msg, bootstyle=PRIMARY) btn_1.pack(side=LEFT, ) btn_2 = ttk.Button(btn_frame, text="停止提醒", command=stop_msg, bootstyle=DANGER) btn_2.pack(side=LEFT, ) # 提醒内容 a_frame = ttk.Frame(root, padding=(10, 0, 0, 0), border=10) # padding a_frame.pack(side=TOP, fill=BOTH) # 如果去掉fill,则变为居中了; 如果加side=LEFT 则纵向居中 b_frame = ttk.Frame(root, padding=(10, 0, 0, 0), border=10) b_frame.pack(side=TOP, fill=BOTH) # 如果去掉fill,则变为居中了; 如果加side=LEFT 则纵向居中 t_label = ttk.Label( master=a_frame, text="提醒内容:", font="-size 13 -weight bold", # width=20, # background='red' -weight bold ) t_label.pack(side=LEFT) text_area = ScrolledText(master=b_frame, height=100, autohide=True) text_area.pack(side=TOP, fill=BOTH) # 初始化提醒内容 text_area.delete('0.0', END) # 删除内容 # TODO 读取文件内容 file_exist = os.path.exists(path) notify_str = None if file_exist: rio = open(path, ) notify_str = rio.read() rio.close() print(notify_str) if notify_str is None or notify_str == '': text_area.insert('insert', '该活动活动了!\n动动手,动动脚~\n起飞~~~') return root if __name__ == "__main__": app = ttk.Window( title='作息提醒', size=(380, 480), # 窗口的大小 (宽, 高) themename="litera", # 设置主题 position=(960, 400), # 窗口所在的位置 minsize=(0, 0), # 窗口的最小宽高 maxsize=(1920, 1080), # 窗口的最大宽高 # resizable=None, # 设置窗口是否可以更改大小 # alpha=1.0, # 设置窗口的透明度(0.0完全透明) ) bagel = setup_frame(app) bagel.pack(side=LEFT, fill=BOTH, expand=YES) app.mainloop()
四、打包
打包使用的是pyinstaller,简单说明下,-w 不显示命令行打包 -F 表示生成exe文件,然后后面的–hidden-import是因为,不加plyer包打不进去,不知道为啥,所以用打包参数的方式import了。
pyinstaller -w -F msg.py --hidden-import plyer.platforms.win.notification
五、效果
保护老腰完成~!
以上就是用python写一个windows消息提醒小程序的详细内容,更多关于python消息提醒程序的资料请关注脚本之家其它相关文章!