PyQt 系統托盤設計


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()        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM