2017-03-10 83 views
0

是否可以在下面的系統托盤應用程序的菜單條目「頂層菜單,中間菜單,最後一個菜單」中設置自定義圖標?在系統托盤中的菜單條目前面設置圖標

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import wx 
import sys 

TRAY_TOOLTIP = 'Tray App' 
TRAY_ICON = '/usr/share/icons/hicolor/32x32/apps/distributor.png' 

def create_menu_item(menu, label, func): 
    item = wx.MenuItem(menu, -1, label) 
    menu.Bind(wx.EVT_MENU, func, id=item.GetId()) 
    menu.AppendItem(item) 
    return item 

class TaskBarIcon(wx.TaskBarIcon): 
    def __init__(self, frame): 
     self.frame = frame 
     super(TaskBarIcon, self).__init__() 
     self.set_icon(TRAY_ICON) 

    def CreatePopupMenu(self): 
     menu = wx.Menu() 

     # Top Menu 
     create_menu_item(menu, 'Top Menu', self.TopMenu) 
     menu.AppendSeparator() 

     # Middle Menu 
     create_menu_item(menu, 'Middle Menu', self.MiddleMenu) 

     # exit and Info 
     menu.AppendSeparator() 
     create_menu_item(menu, 'Last Menu', self.LastMenu) 

     create_menu_item(menu, 'Exit', self.ExitMenu) 

     return menu 

    def set_icon(self, path): 
     icon = wx.IconFromBitmap(wx.Bitmap(path)) 
     self.SetIcon(icon, TRAY_TOOLTIP) 

    def TopMenu(self, event): 
     print 'This is from Top Menu!' 

    def MiddleMenu(self, event): 
     print 'This is from Middle Menu!' 

    def LastMenu(self, event): 
     print 'This is from Last Menu!' 

    def ExitMenu(self, event): 
     wx.CallAfter(self.Destroy) 
     self.frame.Close() 

class App(wx.App): 
    def OnInit(self): 
     frame=wx.Frame(None) 
     self.SetTopWindow(frame) 
     TaskBarIcon(frame) 
     return True 

def main(): 
    app = App(False) 
    app.MainLoop() 


if __name__ == '__main__': 
    main() 

我試圖找到類似的東西,但我找不到任何相關的東西。我看到C#允許在菜單條目前設置圖標,但我不確定它是否也適用於python。 感謝您的幫助和關注。

回答

0

經過一番研究,試驗和錯誤,我發現我不得不使用變量icon在菜單的定義:

def create_menu_item(menu, label, func, icon=None): 
    item = wx.MenuItem(menu, -1, label) 
    if icon: 
     item.SetBitmap(wx.Bitmap(icon)) 
    menu.Bind(wx.EVT_MENU, func, id=item.GetId()) 
    menu.AppendItem(item) 
    return item 

,包括在菜單項中定義的路徑圖標:

 create_menu_item(menu, 'Title', self.Title, icon='icon.png') 

結果: enter image description here

0

wx.MenuItem提供SetBitmap的方法......所以Im相當肯定你可以把它叫做...

def create_menu_item(menu, label, func,bitmap=None): 
    item = wx.MenuItem(menu, -1, label) 
    if bitmap: 
     item.SetBitmap(bitmap) 
    menu.Bind(wx.EVT_MENU, func, id=item.GetId()) 
    menu.AppendItem(item) 
    return item 
+0

嗨,我與你的代碼工作了一段時間,但我不能讓它通過,經過一番研究,我發現,它需要指向變量'icon'並參考到'wx'包中。 –