前幾天看到一個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 最小化到托盤,升級小鬧鐘...
歡迎關注作者公眾號【Python 集中營】,專注于后端編程,每天更新技術干貨,不定時分享各類資料!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/423287.html
標籤:Python
上一篇:解決自動裝配的歧義
下一篇:[exaqp]STL
