利用Python做一个电脑通知小工具

 更新时间:2022年12月29日 16:24:38   作者:嗨学编程  
Windows不是有个消息通知功能,挺喜欢这个功能的,但是不太方便使用,也懒得去研究,于是准备用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通知管理器 源码自取君羊708525271')
        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 = parent
        self.notify = ToastNotifier()
        self.working = True

    def __del__(self):
        self.working = False
        self.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) * 60
        print('当前时间:%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()

到此这篇关于利用Python做一个电脑通知小工具的文章就介绍到这了,更多相关Python电脑通知工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python Pygame实战之打砖块游戏的实现

    Python Pygame实战之打砖块游戏的实现

    这篇文章主要介绍了如何利用Python实现经典的游戏—打砖块。玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。感兴趣的小伙伴可以了解一下
    2022-03-03
  • Python Tkinter Menu控件使用详解

    Python Tkinter Menu控件使用详解

    Menu控件(菜单控件)可以说是 GUI 中“精髓所在”,它以可视化的方式将一系列的命令进行分组,在每一个分组下又可以“隐藏”许多的程序执行命令(即功能)。本文将详细介绍它的使用,需要的可以参考一下
    2022-01-01
  • python生成lmdb格式的文件实例

    python生成lmdb格式的文件实例

    今天小编就为大家分享一篇python生成lmdb格式的文件实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python产生batch数据的操作

    Python产生batch数据的操作

    这篇文章主要介绍了Python产生batch数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • pygame游戏之旅 添加碰撞效果的方法

    pygame游戏之旅 添加碰撞效果的方法

    这篇文章主要为大家详细介绍了pygame游戏之旅的第7篇,教大家如何添加碰撞的效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Python中os模块的使用及文件对象的读写详解

    Python中os模块的使用及文件对象的读写详解

    这篇文章主要介绍了Python中os模块的使用及文件对象的读写详解,Python open() 方法用于打开一个文件,并创建返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError,需要的朋友可以参考下
    2023-08-08
  • python爬虫系列Selenium定向爬取虎扑篮球图片详解

    python爬虫系列Selenium定向爬取虎扑篮球图片详解

    这篇文章主要介绍了python爬虫系列Selenium定向爬取虎扑篮球图片详解,具有一定参考价值,喜欢的朋友可以了解下。
    2017-11-11
  • Python与shell的3种交互方式介绍

    Python与shell的3种交互方式介绍

    这篇文章主要介绍了Python与shell的3种交互方式介绍,本文讲解了os.system、os.popen、subprocess模块等3种方法,需要的朋友可以参考下
    2015-04-04
  • Python操作Elasticsearch详细指南

    Python操作Elasticsearch详细指南

    Elasticsearch 是一种强大且灵活的分布式搜索引擎,而 Python 则以其易用性和强大的数据处理能力,成为开发者在数据操作中的理想选择,下面我们就来看看如何使用Python操作Elasticsearch吧
    2025-02-02
  • python语言中with as的用法使用详解

    python语言中with as的用法使用详解

    本篇文章主要介绍了python语言中with as的用法使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02

最新评论