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
相關文章
相關標籤/搜索