【问题标题】:wxPython System Tray IconwxPython 系统托盘图标
【发布时间】:2011-11-11 21:05:41
【问题描述】:

我正在尝试在系统托盘中为我的应用程序实现一个图标,但是我有两个问题。

首先,虽然我使用的图标是具有透明背景的 .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)   

【问题讨论】:

  • 从 PNG 文件切换到 XPM 文件修复了透明度问题。但是我仍然看到 CTRL-Q,但这可能是因为我的桌面环境。我目前已经在运行 LXDE 的 Arch 和 Gentoo 上对其进行了测试。我将启动一个 VM 并尝试使用不同的环境。
  • 我的猜测是它可能是 wx.ID_OPEN 和 wx.ID_EXIT,但我希望 Ctrl+O 和 Ctrl+Q。

标签: python wxpython wxwidgets


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2011-04-16
    • 2011-06-25
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多