QtGui.QSystemTrayIcon(),Qt中的托盘创建函数。即下图所示的东西:
大致可分为托盘样式设计和托盘点击事件设计。
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的样式:
函数中的a1、a2是右键菜单中的两个子项,如下图:
提示信息tuopan.setToolTip(u'我就是个托盘!')显示如下:
托盘要实现的效果是:点击“关闭”,窗口关闭、且系统状态栏不存在图标,只在系统托盘存在图标,类似微信。
实现的方式:重写closeEvent(self, event)函数(点击“关闭按钮时,响应的是closeEvent函数”),该函数调用时,隐藏主窗口。
#界面上关闭按钮 def closeEvent(self, event): event.ignore() # 忽略关闭事件 self.hide() # 隐藏窗体
右键执行退出程序,调用的quit函数如下:
#从托盘退出 def quit(self): app.exit() #app即为整个项目的app,已被设置为全局变量 app = QtGui.QApplication(sys.argv)
2 托盘事件
#托盘图标事件
def iconActivated(self, reason):
if reason == QtGui.QSystemTrayIcon.DoubleClick: #双击 显示或隐藏窗口
self.a()
elif reason == QtGui.QSystemTrayIcon.Trigger: # 单击 #MiddleClick
中键双击
pass
#响应托盘双击,最大最小化界面
def a(self):
if self.isMinimized() or not self.isVisible():
#若是最小化,则先正常显示窗口,再变为活动窗口(暂时显示在最前面)
self.showNormal()
self.activateWindow()
else:
#若不是最小化,则最小化
self.showMinimized()
行万里路,不忘初心!