PyQt5建立托盤
問題描述:點選關閉叉叉按鈕或者托盤右鍵出來的Quit雖然程式已經結束了,但是托盤圖示還是會繼續停留在系統托盤中,直到滑鼠移到圖示上才會消失
解決方案
需要重寫退出事件,在程式結束前需要先将QSystemTrayIcon對象記憶體清空
使用到的包
- QtWidgets.Qwidget、QtWidgets.QsystemTrayIcon、QtWidgets.QMenu、QtWidgetsQAction、QtWidgets.QApplication
- QtGui.Qicon、QtGui.QColor、QtGui.QPixmap
- sys
步驟
- 建立PyQt基本套路
- 建立QSystemTrayIcon托盤對象
- 建立QIcon對象,将其設定為Tray(托盤)圖示
- 建立QMenu(菜單)對象,建立QAction(行為)對象,将QAction(行為)對象添加至QMenu(菜單)對象中,相當于綁定點選事件
- 将QMenu(菜單)對象設定到右鍵觸發(setContextMenu)事件中
代碼
from PyQt5.QtWidgets import QApplication, QWidget, QSystemTrayIcon, QAction, QMenu
from PyQt5.QtGui import QIcon, QPixmap, QColor
import sys
class TaryWiondw(QWidget):
def __init__(self):
super().__init__()
# 建立托盤對象
self.tray = QSystemTrayIcon()
# 建立QIcon對象,用于設定圖示(圖檔過大會出錯)
self.trayIconPix = QPixmap(16,16)
self.trayIconPix.fill(QColor(100,100,100))
self.Icon = QIcon(self.trayIconPix)
# 設定托盤圖示(QIcon圖示過大或者出錯會導緻托盤顯示不出來)
self.tray.setIcon(self.Icon)
self.tray.setVisible(False)
# 建立QAction
showAction = QAction("&Show", self, triggered = self.Show)
quitAction = QAction("&Quit", self, triggered = self.Exit)
# 建立菜單對象
self.trayMenu = QMenu(self)
# 将動作對象添加到菜單
self.trayMenu.addAction(showAction)
# 增加分割線
self.trayMenu.addSeparator()
self.trayMenu.addAction(quitAction)
# 将菜單欄加入到右鍵按鈕中
self.tray.setContextMenu(self.trayMenu)
def Exit(self):
# 點選關閉按鈕或者點選退出事件會出現圖示無法消失的bug,需要手動将圖示記憶體清除
self.tray = None
sys.exit(app.exec_())
def Show(self):
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
w = TaryWiondw()
sys.exit(app.exec_())