wxPython 中的 PopupMenu,按键激活上下文菜单项

PopupMenu in wxPython with key press activated context menu items

我有一个 GUI,可以在我右键单击 ListCtrl 时创建 PopupMenu,并且我可以通过(左)单击鼠标 select PopupMenu 中的项目。除了此功能之外,我还希望上下文菜单项能够通过特定按键进行 select 编辑(例如 "C" 用于 "Clear","A" 用于 "Clear All").

我该怎么做?

展示想法的片段-

self.listcontrol=wx.ListCtrl(self, wx.NewId(), style = wx.LC_LIST|wx.LC_SINGLE_SEL)
self.listcontrol.Bind(wx.EVT_RIGHT_DOWN, self.OnFileRightDown)
...
def OnFileRightDown(self,e):
  men=wx.Menu()
  cmi = wx.MenuItem(men, wx.NewId(), 'Clear All...')
  men.AppendItem(cmi)
  self.Bind(wx.EVT_MENU, self.OnClearAll,cmi)
  self.PopupMenu(men,e.GetPosition())

我希望能够在上下文菜单弹出时按 "A" 以执行在别处定义的 OnClearAll 方法。

我尝试使用加速器但无法正常工作。

谢谢。

试用并学到了一些东西(在 Win8/wxPython 2.9.5.1 上测试):

:

注意这里的两种不同的下划线样式。两者都适用于小写和大写字母。

  • 通过加速器条目应用加速器:

    menu = wx.Menu()
    item = wx.MenuItem(menu, self.popupID1, "One\tO")
    acc = wx.AcceleratorEntry()
    acc.Set(wx.ACCEL_NORMAL, ord('O'), self.popupID1)
    item.SetAccel(acc)
    menu.AppendItem(item)
    

允许去掉下划线。

  • 通过使用 &:

    修改菜单项字符串来应用加速器
    menu.Append(self.popupID2, "Two\t&T")