wxPython 系统托盘图标

3 投票
1 回答
3210 浏览
提问于 2025-04-17 01:38

我正在尝试为我的应用程序在系统托盘中添加一个图标,但遇到了两个问题。

首先,虽然我使用的图标是一个带透明背景的.png格式,但显示出来的图标却有一个难看的白色背景。

其次,这个图标有一个右键菜单,里面有“显示”和“关闭”这两个选项,但不知道为什么它们旁边都显示了“Ctrl - Q”。我并没有设置这个快捷键组合,而且这个组合也没有任何作用。

这是我使用的代码,几乎是直接从文档中复制过来的:

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)  

这个是通过以下方式实现的:

    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)   

1 个回答

0

wxPython使用一种叫做AcceleratorTable的东西来管理“热键”或“快捷键”,你可以随便怎么称呼它们。就像你可以定义和设置一个布局(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")

撰写回答