Обнаружить отмену контекстного меню - PullRequest
0 голосов
/ 27 июня 2019

Для моего приложения мне нужно определить, отменяет ли пользователь контекст menu, например, с помощью Escape key.

import  wx

class TestPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        wx.StaticText(self, -1, "Right Click for Context menu")
        self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)

    def OnContextMenu(self, event):
        self.popupID1 = wx.NewId()
        self.popupID2 = wx.NewId()
        self.popupID3 = wx.NewId()

        self.Bind(wx.EVT_MENU, self.OnPopup, id=self.popupID1)
        self.Bind(wx.EVT_MENU, self.OnPopup, id=self.popupID2)
        self.Bind(wx.EVT_MENU, self.OnPopup, id=self.popupID3)

        #how to detect/bind event ...? to call OnPopupCanceled if menu is cancelled
        menu = wx.Menu()
        menu.Append(self.popupID1, "One")
        menu.Append(self.popupID2, "Two")
        menu.Append(self.popupID3, "Three")

        self.PopupMenu(menu)
        menu.Destroy()

    def OnPopup(self, event):
        print "Item Selected, event id: ", event.GetId()

    #this should be called, it user exits the menu through escape key
    def OnPopupCanceled(self, event):
        print "Popup Menu cancelled"

app = wx.App(False)
frame = wx.Frame(None)
TestPanel(frame)
frame.Show(True)
app.MainLoop()

Как мне этого добиться? Очевидно, что нет возможности связать событие Escape / Cancel.

1 Ответ

0 голосов
/ 27 июня 2019

Вам нужно поймать событие, wx.EVT_MENU_CLOSE.Добавьте строку:

self.Bind(wx.EVT_MENU_CLOSE, self.OnPopupCanceled)

к вашему методу OnContextMenu.

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

Вы можете найти более подробную информацию здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...