Иконка в системном трее wxPython - PullRequest
3 голосов
/ 07 сентября 2011

Я пытаюсь добавить значок в системный трей для моего приложения, однако у меня есть две проблемы.

Во-первых, хотя я использую значок .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 голосов
/ 06 декабря 2012

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