2011-09-07 113 views
3

我試圖在系統托盤中爲我的應用程序實現一個圖標,但是我有兩個問題。wxPython系統托盤圖標

首先,雖然我使用的圖標是帶透明背景的.png,但圖標有一個醜陋的白色背景。

其次,圖標有一個右鍵單擊菜單,選項「顯示」和「關閉」,但是由於未知的原因,他們都會在旁邊說「Ctrl-Q」。我不僅沒有詳細說明,但熱鍵組合什麼都不做。

這是我使用的代碼。這幾乎是直接從文檔解禁:

self.trayicon = SysTray(self, wx.Icon(TRAY_ICON, wx.BITMAP_TYPE_PNG), TRAY_TOOLTIP) 
    self.trayicon.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) 
    self.trayicon.Bind(wx.EVT_MENU, self.OnShow, id=wx.ID_OPEN) 
+0

從PNG切換到XPM文件修復了透明度問題。不過,我仍然看到CTRL-Q,但這可能是因爲我的桌面環境。我目前在運行LXDE的Arch和Gentoo上進行了測試。我將啓動虛擬機並嘗試使用不同的環境。 –

+2

我的猜測是它可能是wx.ID_OPEN和wx.ID_EXIT,但我期望按Ctrl + O和Ctrl + Q。 – Fenikso

回答

0

wxPython中使用了一種叫做AcceleratorTable保持「熱鍵」,或者你想「捷徑」或什麼的軌跡:

class SysTray(wx.TaskBarIcon): 

def __init__(self, parent, icon, text): 
    wx.TaskBarIcon.__init__(self) 
    self.parentApp = parent 
    self.SetIcon(icon, text) 
    self.CreateMenu() 

def CreateMenu(self): 
    self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.ShowMenu) 
    self.menu=wx.Menu() 
    self.menu.Append(wx.ID_OPEN, "Show") 
    self.menu.Append(wx.ID_EXIT, "Close") 

def ShowMenu(self,event): 
    self.PopupMenu(self.menu) 

這是使用實施給他們打電話。類似於您可以定義和設置sizer的方式,您可以定義和設置AcceleratorTable,wxPython將使用它。更多相關內容http://www.blog.pythonlibrary.org/2010/12/02/wxpython-keyboard-shortcuts-accelerators/

此外,爲了獲得Ctrl-Q或Ctrl-O熱鍵,您需要在文本中指定它們或將它們添加到加速表中。如果將正確格式的文本添加到菜單項中,wxPython應該識別「這是一個熱鍵」,並自動將它添加到加速表中。

self.menu.Append(wx.ID_OPEN, "Show\tCtrl+O") 
self.menu.Append(wx.ID_EXIT, "Close\tCtrl+Q")