Значок wxPython в системном трее

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

Во-первых, хотя значок, который я использую, имеет формат .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)   

person Peter-W    schedule 07.09.2011    source источник
comment
Переключение с файлов PNG на файлы XPM устранило проблему с прозрачностью. Однако я все еще вижу CTRL-Q, однако это может быть из-за моей среды рабочего стола. В настоящее время я тестировал его на Arch и Gentoo, на обоих работает LXDE. Я запущу виртуальную машину и попробую с другой средой.   -  person Peter-W    schedule 07.09.2011
comment
Я предполагаю, что это, вероятно, wx.ID_OPEN и wx.ID_EXIT, но я бы ожидал Ctrl+O и Ctrl+Q.   -  person Fenikso    schedule 07.09.2011


Ответы (1)


wxPython использует нечто, называемое AcceleratorTable, для отслеживания «горячих клавиш» или «горячих клавиш» или как бы вы их ни назвали. Подобно тому, как вы можете определить и установить размер, вы можете определить и установить 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")
person Mike Sandford    schedule 06.12.2012