2011-09-07 169 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")