PyQt 系统托盘设计

QtGui.QSystemTrayIcon(),Qt中的托盘建立函数。即下图所示的东西:

大体可分为托盘样式设计和托盘点击事件设计。python


1 托盘样式设计微信

#如下是我自定义的托盘设计函数
#托盘设计
    def trayIcon(self):
        #托盘
        tuopan = QtGui.QSystemTrayIcon(self) #建立托盘
        tuopan.setIcon(QtGui.QIcon(r':/0102.png'))  #设置托盘图标
                
        # 弹出的信息被点击就会调用messageClicked链接的函数
        #tuopan.messageClicked.connect(self.message)
        
        #托盘图标被激活
        tuopan.activated.connect(self.iconActivated)
     

         #设置提示信息
         tuopan.setToolTip(u'我就是个托盘!')
 

        #建立托盘的右键菜单
        tpMenu = QtGui.QMenu() 
        a1 = QtGui.QAction(QtGui.QIcon('exit.png'), u'关于', self) #添加一级菜单动做选项(关于程序)
        a1.triggered.connect(self.about)
        a2 = QtGui.QAction(QtGui.QIcon('exit.png'), u'退出', self) #添加一级菜单动做选项(退出程序)
        a2.triggered.connect(self.quit)
        tpMenu.addAction(a1)
        tpMenu.addAction(a2)
        tuopan.setContextMenu(tpMenu) #把tpMenu设定为托盘的右键菜单

        tuopan.show()  #显示托盘    
        
        #托盘建立出来时显示的信息
        tuopan.showMessage(u"标题", '托盘信息内容', icon=1) #icon的值  0没有图标  1是提示  2是警告  3是错误        
      

上面的函数中,tuopan.showMessage必定要位于tuopan.show()函数以后,不然message的信息不会显示。下图为showMessage的样式:app

函数中的a一、a2是右键菜单中的两个子项,以下图:ide

提示信息tuopan.setToolTip(u'我就是个托盘!')显示以下:函数

托盘要实现的效果是:点击“关闭”,窗口关闭、且系统状态栏不存在图标,只在系统托盘存在图标,相似微信。ui

实现的方式:重写closeEvent(self, event)函数(点击“关闭按钮时,响应的是closeEvent函数”),该函数调用时,隐藏主窗口。spa

#界面上关闭按钮
def closeEvent(self, event):
    event.ignore()  # 忽略关闭事件
    self.hide()  # 隐藏窗体

右键执行退出程序,调用的quit函数以下:设计

#从托盘退出
def quit(self):
     app.exit()

#app即为整个项目的app,已被设置为全局变量
app = QtGui.QApplication(sys.argv)

2 托盘事件code

#托盘图标事件
def iconActivated(self, reason):
    if reason == QtGui.QSystemTrayIcon.DoubleClick:  #双击 显示或隐藏窗口
        self.a()
    elif reason == QtGui.QSystemTrayIcon.Trigger:    # 单击  #  中键双击
        pass


#响应托盘双击,最大最小化界面
def a(self):
    if self.isMinimized() or not self.isVisible():
        #如果最小化,则先正常显示窗口,再变为活动窗口(暂时显示在最前面)
        self.showNormal()
        self.activateWindow()
    else:
        #若不是最小化,则最小化
        self.showMinimized()        
MiddleClick
相关文章
相关标签/搜索