Python制做一个电脑通知小工具,再也不怕忘记事情拉~

news/2024/11/27 23:44:53/

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

又到了学Python时刻~

Windows不是有个消息通知功能,挺喜欢这个功能的,

但是不太方便使用,也懒得去研究,

于是准备用Python自己写一个,通过设定通知的间隔时间来实现类似闹钟的效果,

这样既不用听闹钟的吵闹声,又做到了定时通知的效果,比如定时通知埋头写代码的我们按时喝水。

说干就干,直接使用pyqt来设计成人人都可以用的工具。

代码展示

( 完整源码点击此处跳转跳转文末名片加入君羊,找管理员小姐姐领取呀~ )

UI部分使用的包

from PyQt5.QtGui import *  # UI 界面相关
from PyQt5.QtCore import *  # 核心组件包
from PyQt5.QtWidgets import *  # UI 布局相关模块

界面主题相关的模块,这里采用的是黑色的模块主题。

from qdarkstyle import load_stylesheet_pyqt5

应用相关的模块

import sys
import os

下面几个模块中唯一比较特殊的就是win10toast模块是用来做windows通知的,

还有一个用到了python线程中的定时器。

from win10toast import ToastNotifier  # 导入系统通知对象
import time  # 系统时间模块
import datetime
from threading import Timer  # 定时器

主要代码

class WinNotify(QWidget):def __init__(self):super(WinNotify, self).__init__()self.init_ui()def init_ui(self):self.setWindowTitle('windows通知管理器 源码自取君羊261823976')self.setWindowIcon(QIcon('通知.ico'))self.setFixedWidth(550)self.notify_subject_label = QLabel()self.notify_subject_label.setText('通知主题')self.notify_subject_text = QLineEdit()self.notify_subject_text.setPlaceholderText('输入通知主题')self.notify_current_label = QLabel()self.notify_current_label.setText('通知内容')self.notify_current_text = QLineEdit()self.notify_current_text.setPlaceholderText('输入通知内容')self.notify_time_label = QLabel()self.notify_time_label.setText('通知间隔')self.notify_time_combox = QComboBox()self.notify_time_combox.addItems(['10|分钟', '30|分钟', '45|分钟', '60|分钟', '120|分钟'])self.notify_icon_path = QLineEdit()self.notify_icon_path.setPlaceholderText('通知图标(*.ico)')self.notify_icon_btn = QPushButton()self.notify_icon_btn.setText('选择图标')self.notify_icon_btn.clicked.connect(self.notify_icon_btn_click)self.start_btn = QPushButton()self.start_btn.setText('开启通知吧!')self.start_btn.clicked.connect(self.start_btn_click)form = QFormLayout()form.addRow(self.notify_subject_label, self.notify_subject_text)form.addRow(self.notify_current_label, self.notify_current_text)form.addRow(self.notify_time_label, self.notify_time_combox)form.addRow(self.notify_icon_path, self.notify_icon_btn)vbox = QVBoxLayout()vbox.addLayout(form)vbox.addWidget(self.start_btn)self.thread_ = WorkThread(self)self.setLayout(vbox)def notify_icon_btn_click(self):file = QFileDialog.getOpenFileName(self, os.getcwd(), '打开图片', 'ICO File(*.ico)')print(file[0])self.notify_icon_path.setText(file[0])def start_btn_click(self):self.start_btn.setEnabled(False)self.thread_.start()

主函数启动应用时,将黑色主题加入到app的布局当中。

app.setStyleSheet(load_stylesheet_pyqt5())

线程运行相关部分

class WorkThread(QThread):def __init__(self,parent=None):super(WorkThread, self).__init__(parent)self.parent = parentself.notify = ToastNotifier()self.working = Truedef __del__(self):self.working = Falseself.wait()def run(self):self.show_toast()def show_toast(self):notify_head = self.parent.notify_subject_text.text()notify_text = self.parent.notify_current_text.text()notify_ico = self.parent.notify_icon_path.text()notify_sen = self.parent.notify_time_combox.currentText().split('|')[0]notify_sen = int(notify_sen) * 60print('当前时间:%s' % (datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))self.notify.show_toast(f"{notify_head}", f"{notify_text}", duration=5, threaded=True, icon_path=notify_ico)while self.notify.notification_active():time.sleep(0.005)timer = Timer(notify_sen, self.show_toast)timer.start()

效果展示

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇


http://www.ppmy.cn/news/10898.html

相关文章

C++类和对象(二)

​​​​​​类和对象(一) 目录 一. 类的6个默认成员函数 二. 构造函数 1.概念 2.特性 三. 析构函数 1.概念 2.特性 四. 拷贝构造函数 1.概念 2.特征 五. 赋值运算符重载 1.运算符重载 2.赋值运算符重载 3.前置和后置重载 一. …

Python识别屏幕题目并模拟做题

前言 马上就要过年了,有许多小伙伴们本本还没拿到,还在苦苦刷题,一直及格不了,现在,我们用Python模拟做题,看看效果。 环境使用 python 3.9pycharm 模块使用 requestsreselenium谷歌驱动 import reimpor…

Leetcode - 19 - 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1],…

Django(14):分页查询

使用Django框架内置模块django.core.paginator中封装的Paginator类Page类进行分页功能实现。其中Paginator是分页器,从分页器中可以得到Page,即分页对象。源码如下: import collections.abc import inspect import warnings from math impor…

接口测试——postman和Jemter

接口测试——postman和Jemterpostmanpostman工作原理postman入门postman的基础用法postman的高级用法使用postman管理测试用例批量执行测试用例postman断言环境变量和全局变量postman关联postman请求前置脚本postman参数化及生成测试报告参数化与数据驱动postman生成测试报告je…

JDK并发编程Actomic和AQS详解

JDK并发编程Actomic和AQS详解1 Atomic系列优化加锁并发性能1.0 i和ActomicInteger之间的差别分析1.1 AtomicInteger中的CAS无锁化原理1.2 AtomicInteger源码剖析:仅限JDK内部使用的Unsafe类1.3 AtomicInteger源码剖析:无线重复循环以及CAS操作1.4 Atomic…

Kubernetes(k8s) 笔记总结(二)

提示:针对kubernetes的工作均衡学习。 文章目录1. Kubernetes 创建资源方式2. Kubernetes 操作NameSpace3. Kubernetes的 Pod应用3.1 Pod的 解释3.2 通过命令行来创建一个pod3.3 配置文件方式创建一个Pod3.4 dashboard 可视化操作Pod3.5 针对Pod的一些细节操作3.6 P…

基于 js 制作一个贪吃蛇小游戏

目录前言:项目效果展示:代码实现思路:使用方法:实现代码:总结:前言: 在工作学习之余玩一会游戏既能带来快乐,还能缓解生活压力,跟随此文一起制作一个小游戏吧。 描述&…