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

时间:2015-04-03 11:01:47

标签: wxpython contextmenu popupmenu

当我右键单击ListCtrl时,我有一个创建PopupMenu的GUI,我可以通过(左)鼠标单击从PopupMenu中选择项目。除了这个功能之外,我还希望能够通过特定的按键选择上下文菜单项(例如“C”代表“清除”,“A”代表“全部清除”)。

我该怎么做?

显示这个想法的片段 -

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())

当弹出上下文菜单以执行其他地方定义的OnClearAll方法时,我希望能够按“A”。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

Example popup

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

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

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