关于python:大年初二做了一个windows通知管理器

4次阅读

共计 3341 个字符,预计需要花费 9 分钟才能阅读完成。

前几天看到一个 python 框架 win10toast,它能够用来做 windows 的音讯告诉性能。通过设定告诉的间隔时间来实现一些事件告诉的性能,比方能够能够揭示一头扎进代码编写过程的咱们按时喝水。

返回文末获取源代码 >>>

界面布局采纳的仍旧是 pyqt5 的 ui 设计,应用界面化间接设置好想要提醒的内容和工夫就能够给咱们定时的发告诉了。

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  # 定时器 

首先还是将 UI 界面中的布局和界面组件相干的局部写进去,界面也比较简单,采纳了两种布局一种是 Form 表单布局、另外一个是垂直布局。

class WinNotify(QWidget):
    def __init__(self):
        super(WinNotify, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('windows 告诉管理器  公众号:[Python 集中营]')
        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())

线程运行相干局部,通过继承 QThead 类来编写子线程。

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 常识分享的公众号,心愿能够失去您的关注~

【往期精彩】

gif 动静图片生成器,多张图片组合后生成动图 …

python 几个常见的数据处理操作,一行代码就能实现!

过年了,用 PyQt5 生成一副春联吧 …

记录一下 python 中的十大 % 占位符对应的格式化 …

PyQt5 最小化到托盘,降级小闹钟 …

正文完
 0