大体可分为托盘样式设计和托盘点击事件设计。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