PyQt5 시스템 트레이 아이콘 및 메시지 알림

2662 단어
온전한 응용 프로그램은 메시지 알림과 시스템 트레이 아이콘이 없으면 안 된다.
공식 홈페이지 자료와 다른 개인 블로그를 참고해서 제가 이런 예를 만들었어요.
class window(QWidget):
    def __init__(self, parent=None):
        super(window, self).__init__(parent)
        ti = TrayIcon(self)
        ti.show()

우선 빈 창을 만들어서 테스트합니다. 트레이 Icon은 QSystemTray Icon에서 시스템 트레이 아이콘을 표시하는 클래스를 계승합니다.
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의 블로그 주취동파의 블로그
전재 대상:https://www.cnblogs.com/jikeboy/p/6526274.html

좋은 웹페이지 즐겨찾기