(社恐福音)用python写一个定时弹窗功能

背景

背景是换了一个工作,需要点外卖了
写代码太认真的时候又经常忘记
这时候就需要一个闹钟
手机闹钟声音太大
会影响他人
所以用python 写一个弹窗功能,只影响自己

效果图

界面效果图
添加闹钟

弹窗效果图(带音乐)

原理

管理列表和定时功能通过windows自带的计划完成
python程序不用占用后台

源码

管理界面

import tkinter as tk
from tkinter import ttk, simpledialog
import subprocess
import sys
from pathlib import Pathdef resource_path(relative_path):""" Get absolute path to resource, works for dev and for PyInstaller """base_path = Path.cwd()return base_path.joinpath(relative_path)class CreateTaskDialog(simpledialog.Dialog):def body(self, master):self.task_name = tk.StringVar()self.head = tk.StringVar()self.message = tk.StringVar()self.time = tk.StringVar()tk.Label(master, text="闹钟名:").grid(row=0, sticky=tk.W)tk.Entry(master, textvariable=self.task_name).grid(row=0, column=1)tk.Label(master, text="标题:").grid(row=1, sticky=tk.W)tk.Entry(master, textvariable=self.head).grid(row=1, column=1)tk.Label(master, text="内容:").grid(row=3, sticky=tk.W)tk.Entry(master, textvariable=self.message).grid(row=3, column=1)tk.Label(master, text="时间(例如: 08:00):").grid(row=4, sticky=tk.W)tk.Entry(master, textvariable=self.time).grid(row=4, column=1)return masterdef apply(self):self.result = (self.task_name.get(), self.head.get(), self.message.get(), self.time.get())def get_task_list():"""获取任务列表"""cmd = ['schtasks', '/query', '/fo', 'csv', '/v']output = subprocess.check_output(cmd, text=True)lines = output.split(",")tasks = []for i in range(len(lines)):# 判断是否包含字符串"闹钟_"if "闹钟_" in lines[i]:tasks.append(lines[i].replace('\\', '').replace('"', ''))print(tasks)return tasksdef delete_selected_task():"""删除选中的任务"""selected_task = task_listbox.get(tk.ACTIVE)task_name = selected_task.strip() # 提取任务名称cmd = ['schtasks', '/delete', '/tn', task_name, '/f']try:subprocess.run(cmd, check=True)print(f"Task '{task_name}' deleted successfully.")refresh_task_list()  # 刷新任务列表except subprocess.CalledProcessError as e:print(f"Failed to delete task: {e}")def create_task():"""创建新任务"""dialog = CreateTaskDialog(root)if dialog.result:task_name, head, message,  time = dialog.resulttask_name = '闹钟_' + task_namecommand = str(resource_path("run.bat ")) + head + " " + message if not task_name or not time:tk.messagebox.showerror("Error", "Task name and time cannot be empty.")else:cmd = cmd = ['schtasks','/create','/tn', task_name,'/tr', command,'/sc', 'DAILY','/mo', '1','/st', time,'/f']try:subprocess.run(cmd, check=True)print(f"Task '{task_name}' created successfully.")refresh_task_list()  # 刷新任务列表except subprocess.CalledProcessError as e:print(f"Failed to create task: {e}")def refresh_task_list():"""刷新任务列表"""task_listbox.delete(0, tk.END)for task in get_task_list():task_listbox.insert(tk.END, task)def main():print(resource_path("run.bat "))global root, task_listboxroot = tk.Tk()root.title("闹钟列表")# 创建任务列表框task_listbox = tk.Listbox(root, width=80)task_listbox.pack(pady=20)# 刷新任务列表refresh_task_list()# 创建按钮delete_button = ttk.Button(root, text="删除所选闹钟", command=delete_selected_task)delete_button.pack(side=tk.LEFT, padx=10, pady=10)create_button = ttk.Button(root, text="创建新闹钟", command=create_task)create_button.pack(side=tk.RIGHT, padx=10, pady=10)refresh_button = ttk.Button(root, text="刷新列表", command=refresh_task_list)refresh_button.pack(side=tk.BOTTOM, padx=10, pady=10)root.mainloop()if __name__ == "__main__":main()

弹窗运行脚本(run.bat)

@echo off
chcp 65001 > nul
cd /d "%~dp0"
C:/Users/test/AppData/Local/Programs/Python/Python312/python.exe 弹窗.py %1 %2

弹窗

import tkinter as tk
import pygame
import sys
import time
import randomdef play_background_music(music_file):pygame.mixer.music.load(music_file)pygame.mixer.music.play(loops=-1)  # 循环播放def stop_music():pygame.mixer.music.stop()def shake_window(window, duration=1, intensity=10):start_time = time.time()while time.time() - start_time < duration:x = window.winfo_x() + random.randint(-intensity, intensity)y = window.winfo_y() + random.randint(-intensity, intensity)window.geometry('+{}+{}'.format(x, y))window.update_idletasks()time.sleep(0.01)
def on_window_appear():shake_window(root)def update_time_label(label):current_time = time.strftime("%H:%M:%S", time.localtime())label.config(text=current_time)label.after(1000, lambda: update_time_label(label))  # 每秒更新一次def main():# 检查是否有足够的参数传递if len(sys.argv) < 2:print("Usage: python script_name.py arg1 arg2 ...")sys.exit(1)argv= sys.argvglobal rootpygame.init()pygame.mixer.init()# 假设你的音乐文件名为 'background_music.mp3'music_file =  '默认.mp3'play_background_music(music_file)root = tk.Tk()root.title(argv[1])root.geometry("250x100+500+200")label = tk.Label(root, text=argv[2])label.pack(pady=20)# 创建一个显示时间的标签time_label = tk.Label(root, font=("Arial", 16), fg="red")time_label.pack(expand=True)# 更新时间显示update_time_label(time_label)# 在窗口出现时触发抖动效果root.after(100, on_window_appear)root.mainloop()if __name__ == "__main__":main()

文件目录

在这里插入图片描述

后续优化

1、可以考虑选中闹钟然后查看详情
2、可以添加闹钟类型、每周一次、每月一次、每年一次

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7月18日学习打卡,数据结构堆

hello大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有不…

ARM架构(二)—— arm v7/v8/v9寄存器介绍

1、ARM v7寄存器 1.1 通用寄存器 V7 V8开始 FIQ个IRQ优先级一样&#xff0c; 通用寄存器&#xff1a;31个 1.2 程序状态寄存器 CPSR是程序状态毒存器&#xff0c;保存条件标志位&#xff0c;中断禁止位&#xff0c;当前处理器模式等控制和状态位。每种异常模式下还存在SPSR&…

《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-02-信息系统架构

文章目录 1. 概述1.1 信息系统架构&#xff08;ISA&#xff09;1.2 架构风格 2. 信息系统架构分类2.1 信息系统物理结构2.1.1 集中式结构2.1.2 分布式结构 2.2 信息系统的逻辑结构1&#xff09;横向综合2&#xff09;纵向综合3&#xff09;纵横综合 3. 信息系统架构的一般原理4…

Android使用ANativeWindow更新surfaceView内容最简Demo

SurfaceView简介 SurfaceView对比View的区别 安卓的普通VIew,都依赖于当前Activity的Window的surface&#xff0c;这个surface用于承载view树从底到顶绘制出来的所有内容&#xff0c;因此任何一个view需要更新时&#xff0c;都需要把所有view中底到顶进行更新&#xff0c;即使使…

解决:Linux上SVN 1.12版本以上无法直接存储明文密码

问题&#xff1a;今天在Linux机器上安装了SVN&#xff0c;作为客户端使用&#xff0c;首次执行SVN相关操作&#xff0c;输入账号密码信息后&#xff0c;后面再执行SVN相关操作&#xff08;比如"svn update"&#xff09;还是每次都需要输入密码。 回想以前在首次输入…

Python进阶(4)--正则表达式

正则表达式 在Python中&#xff0c;正则表达式&#xff08;Regular Expression&#xff0c;简称Regex&#xff09;是一种强大的文本处理工具&#xff0c;它允许你使用一种特殊的语法来匹配、查找、替换字符串中的文本。 在这之前&#xff0c;还记得之前我们是通过什么方法分割…

[论文笔记] pai-megatron-patch Qwen2-CT 长文本rope改yarn

更改: # Copyright (c) 2024 Alibaba PAI and Nvidia Megatron-LM Team. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License a…

【系统架构设计】数据库系统(二)

数据库系统&#xff08;二&#xff09; 数据库模式与范式数据库设计数据库设计的方法数据库设计的基本步骤 事务管理并发控制故障和恢复 备份与恢复分布式数据库系统数据仓库数据挖掘NoSQL大数据 数据库模式与范式 数据库设计 数据库设计的方法 目前已有的数据库设计方法可分…

element UI :el-table横向列内容超出宽度,滚动条不显示问题

是否能解决你问题的前提 **看到这篇文章的解决问题的方案之前&#xff0c;请先回忆你是否在项目中的全局样式或者私有组件中去单独设置过滚动条样式。如果有 请继续往下看&#xff1a;**单独设置过滚动条样式代码实例&#xff1a; ::-webkit-scrollbar {/*滚动条整体样式*/wi…

layui 让table里的下拉框不被遮挡

记录&#xff1a;layui 让table里的下拉框不被遮挡 /* 这个是让table里的下拉框不被遮挡 */ .goods_table .layui-select-title,.goods_table .layui-select-title input{line-height: 28px;height: 28px; }.goods_table .layui-table-cell {overflow: visible !important; }.…

【Django】网上蛋糕项目商城-注册,登录,修改用户信息,退出功能

概念 通过以上多篇文章的讲解&#xff0c;对该项目的功能已经实现了很多&#xff0c;本文将对该项目的用户注册&#xff0c;登录&#xff0c;修改用户信息&#xff0c;以及退出等功能的实现。 注册功能实现 点击head.html头部页面的注册按钮&#xff0c;触发超链接跳转至use…

操作系统发展简史(Unix/Linux 篇 + DOS/Windows 篇)+ Mac 与 Microsoft 之风云争霸

操作系统发展简史&#xff08;Unix/Linux 篇&#xff09; 说到操作系统&#xff0c;大家都不会陌生。我们天天都在接触操作系统 —— 用台式机或笔记本电脑&#xff0c;使用的是 windows 和 macOS 系统&#xff1b;用手机、平板电脑&#xff0c;则是 android&#xff08;安卓&…

来聊聊去中心化Redis集群节点如何完成通信

写在文章开头 今天我们来聊点有意思的&#xff0c;关于redis中集群间通信的设计与实现&#xff0c;本文将从源码的角度分析redis集群节点如何利用Gossip协议完成节点间的通信与传播&#xff0c;希望对你有帮助。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术…

MAVSKD-Java开源库mavsdk_server库macOS平台编译

1.下载源码 2.使用IDEA打开,进行mavsdk_server目录,使用gradle进行编译 3.开始编译时会自动下载依赖 4.下载完成后,会自动编译 5.编译成功 6.成功生成AAR文件

2024算力基础设施安全架构设计与思考(免费下载)

算网安全体系是将数据中心集群、算力枢纽、一体化大数据中心三个层级的安全需求进行工程化解耦&#xff0c;从国家安全角度统筹设计&#xff0c;通过安全 服务化方式&#xff0c;依托威胁情报和指挥协同通道将三层四级安全体系串联贯通&#xff0c;达成一体化大数据安全目标。 …

文件IO(Ubuntu)

文件IO 目的 将数据写入文件中 与标准IO的区别 &#xff08;为什么要学习文件IO&#xff09; 标准IO只能操作普通文件和特殊的管道文件 文件IO能操作几乎所有的的文件 缓存区的目的 标准IO有缓存区 文件IO没有缓存区 根据右图描述 标准IO 文件IO buffer缓存区 有缓存区…

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)

文章目录 DDL数据定义语言1、创建数据库2、创建表3、修改表结构4、删除5、数据类型 列的约束主键约束&#xff08;primary key&#xff09;唯一约束&#xff08;unique key&#xff09;非空约束检查约束&#xff08;check&#xff09;外键约束&#xff08;foreign key&#xff…

水域救援装备的详细简介_鼎跃安全

水域救援行动需要救援人员配备全面、专业的装备&#xff0c;以应对各种复杂的水域环境和救援任务。水域救援套装应运而生&#xff0c;它集合了水域救援所需的各类关键装备&#xff0c;为救援人员提供全方位的保护和辅助&#xff0c;确保数援行动的高效与安全。 水域救援头盔&am…

S参数入门

一、说明 S参数全称为散射参数&#xff0c;主要用来作为描述线性无源互联结构的一种行为模型&#xff0c;来源于网络分析方法。网络分析法是一种频域方法&#xff0c;在一组离散的频率点上&#xff0c;通过在输入和输出端口得到的参量完全描述线性时不变系统&#xff08;定义参…

PyTorch 深度学习实践-循环神经网络基础篇

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记基于RNNCell实现总代码 基于RNN实现总代码 含嵌入层的RNN网络嵌入层的作用含嵌入层的RNN网络架构总代码 其他RNN扩展基本注意力机制自注意力机制&#xff08;Self-Attention&#xff09;自注意力计算多头注意力机制&#xf…