PyQt5 系統托盤圖標和消息通知

一個完整的應用沒有消息通知和系統托盤圖標是不行滴。

參考官網資料和其他個人的博客我做了個這樣的例子

class window(QWidget):
    def __init__(self, parent=None):
        super(window, self).__init__(parent)
        ti = TrayIcon(self)
        ti.show()

首先創建一個空窗口用來測試,TrayIcon就是我繼承來自QSystemTrayIcon顯示系統托盤圖標的類。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class TrayIcon(QSystemTrayIcon):
    def __init__(self, parent=None):
        super(TrayIcon, self).__init__(parent)
        self.showMenu()
        self.other()

    def showMenu(self):
        "設計托盤的菜單,這裏我實現了一個二級菜單"
        self.menu = QMenu()
        self.menu1 = QMenu()
        self.showAction1 = QAction("顯示消息1", self, triggered=self.showM)
        self.showAction2 = QAction("顯示消息2", self,triggered=self.showM)
        self.quitAction = QAction("退出", self, triggered=self.quit)

        self.menu1.addAction(self.showAction1)
        self.menu1.addAction(self.showAction2)
        self.menu.addMenu(self.menu1, )

        self.menu.addAction(self.showAction1)
        self.menu.addAction(self.showAction2)
        self.menu.addAction(self.quitAction)
        self.menu1.setTitle("二級菜單")
        self.setContextMenu(self.menu)

    def other(self):
        self.activated.connect(self.iconClied)
        #把鼠標點擊圖標的信號和槽連接
        self.messageClicked.connect(self.mClied)
        #把鼠標點擊彈出消息的信號和槽連接
        self.setIcon(QIcon("ico.ico"))
        self.icon = self.MessageIcon()
        #設置圖標

    def iconClied(self, reason):
        "鼠標點擊icon傳遞的信號會帶有一個整形的值,1是表示單擊右鍵,2是雙擊,3是單擊左鍵,4是用鼠標中鍵點擊"
        if reason == 2 or reason == 3:
            pw = self.parent()
            if pw.isVisible():
                pw.hide()
            else:
                pw.show()
        print(reason)

    def mClied(self):
        self.showMessage("提示", "你點了消息", self.icon)

    def showM(self):

        self.showMessage("測試", "我是消息", self.icon)

    def quit(self):
        "保險起見,爲了完整的退出"
        self.setVisible(False)
        self.parent().exit()
        qApp.quit()
        sys.exit()

class window(QWidget):
    def __init__(self, parent=None):
        super(window, self).__init__(parent)
        ti = TrayIcon(self)
        ti.show()

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    w = window()
    w.show()
    sys.exit(app.exec_())

由於系統托盤不太好截圖我就不截圖了。
參考:
qt官網
Perchouli的博客
酒醉東坡的博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章