Используя wxPython, я создал значок панели задач и меню.Все работает нормально (по крайней мере, в Windows) при щелчке правой кнопкой мыши по значку: то есть меню отображается и автоматически скрывается при щелчке в другом месте, как на панели задач Windows.
Теперь я хочучтобы меню появилось, когда по иконке также щелкнули левой кнопкой мыши.Поэтому я вставил Bind()
в щелчок левой кнопкой мыши в оболочке класса Frame, вызвав CreatePopupMenu()
значка панели задач:
import wx
class BibTaskBarIcon(wx.TaskBarIcon):
def __init__(self, frame):
wx.TaskBarIcon.__init__(self)
self.frame = frame
icon = wx.Icon('test_icon.ico', wx.BITMAP_TYPE_ICO)
self.SetIcon(icon, "title")
def CreatePopupMenu(self):
self.menu = wx.Menu()
self.menu.Append(wx.NewId(), "dummy menu ")
self.menu.Append(wx.NewId(), "dummy menu 2")
return self.menu
class TaskBarFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, style=wx.FRAME_NO_TASKBAR)
...
self.tbicon = BibTaskBarIcon(self)
wx.EVT_TASKBAR_LEFT_UP(self.tbicon, self.OnTaskBarLeftClick)
...
def OnTaskBarLeftClick(self, evt):
self.PopupMenu(self.tbicon.CreatePopupMenu())
...
def main(argv=None):
app = wx.App(False)
TaskBarFrame(None, "testing frame")
app.MainLoop()
Это отлично работает, за исключением , что меню не исчезает автоматически при нажатии в другом месте на экране. Фактически, щелчок левой кнопкой мыши по значку несколько раз создает несколько меню.Единственный способ скрыть меню (я) - нажать на один из его пунктов (который вам не всегда нужен).Я посмотрел на доступные методы TaskbarIcon, но не смог понять, какой из них использовать, чтобы скрыть меню (.Destroy()
не работает).Более того, я не знаю, к какому событию его привязать (есть EVT_SET_FOCUS
, но я не смог найти ни одного EVT_LOOSE_FOCUS
или подобного).
Итак, как скрыть меню при потере фокуса?
РЕДАКТИРОВАТЬ : я вставил немного больше кода, чтобы сделать его более понятным