zoukankan      html  css  js  c++  java
  • 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的博客
    酒醉东坡的博客

  • 相关阅读:
    企业级应用和互联网应用的区别
    JAVAEE课程目标
    组队项目--投票管理系统
    关于JSON
    Ajax技术学习
    Applet的学习
    Async的相关学习
    Filter分析
    JavaEE-map
    Session
  • 原文地址:https://www.cnblogs.com/jikeboy/p/6526274.html
Copyright © 2011-2022 走看看