<p>您需要在<code>MenuBar</code>中实现<code>Accelerators</code>,可能还需要在<code>MenuItem</code>中实现</p>
<blockquote>
<p>An accelerator table allows the application to specify a table of keyboard shortcuts for menu or button commands.</p>
</blockquote>
<p>通常,通过传递<code>wx.AcceleratorTable</code>,使用菜单项中的文本设置这些属性</p>
<pre><code>p1 = wx.MenuItem(playm, wx.NewIdRef(), '&Play\tCtrl+P')
</code></pre>
<p>此处<code>&Play</code>将<code>P</code>设置为菜单加速器,并将Ctrl+p设置为菜单项所代表函数的热键。<br/>
换句话说,在浏览菜单时,按<code>P</code>将选择播放菜单项。不浏览菜单时,只需按Ctrl+P键即可运行该功能。<br/>
注意</p>
<ul>
<li>您不必同时进行设置</李>
<li>在单个菜单或菜单栏中,不要多次将<code>&</code>符号和字符放在同一个字母之前,因为只有第一个字母起作用。<br/>
e、 g.“&;Save”和“Sa&;ve as”将起作用,使用<code>S</code>表示“Save”,使用<code>V</code>表示“Save as”</li>
</ul>
<blockquote>
<p>To access the Menu shortcuts Press the <code>Alt</code> button and then any of the underlined letters.</p>
</blockquote>
<p>一些带有菜单加速器但没有指定热键的最小代码:</p>
<pre><code>import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200, 100))
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
# A Statusbar in the bottom of the window
self.CreateStatusBar()
# Setting up the menus
'''Define main items'''
filemenu = wx.Menu()
editmenu = wx.Menu()
infomenu = wx.Menu()
'''Items'''
# file menu
menu_open = filemenu.Append(wx.ID_OPEN, "Open")
filemenu.Append(wx.ID_NEW, "New")
filemenu.Append(wx.ID_SAVE, "Save")
filemenu.Append(wx.ID_SAVEAS, "Save as")
filemenu.Append(wx.ID_EXIT, '&Quit', 'Quit application')
filemenu.AppendSeparator()
filemenu.Append(wx.ID_PRINT, "&Print")
filemenu.Append(wx.ID_PRINT_SETUP, "Print setup")
filemenu.Append(wx.ID_PREVIEW, "Preview")
# edit menu
editmenu.Append(wx.ID_COPY, "Copy")
editmenu.Append(wx.ID_CUT, "Cut")
editmenu.Append(wx.ID_PASTE, "Paste")
editmenu.AppendSeparator()
editmenu.Append(wx.ID_UNDO, "Undo")
editmenu.Append(wx.ID_REDO, "Re-do it")
# info menu
infomenu.Append(wx.ID_ABOUT, "About")
'''Bind items for activation'''
# bind file menu
self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
self.Bind(wx.EVT_MENU, self.OnOpen)
# Creating the menubar.
menuBar = wx.MenuBar()
# Add menus
menuBar.Append(filemenu, "&File")
menuBar.Append(editmenu, "&Edit")
menuBar.Append(infomenu, "&Help")
# Adding the MenuBar to the Frame content.
self.SetMenuBar(menuBar)
self.Show(True)
def OnOpen(self, event):
print ("Menu item selected")
# event skip as we want to continue checking events in case Quit was chosen
event.Skip()
def OnExit(self, event):
self.Destroy()
app = wx.App(False)
frame = MainWindow(None, "Sample editor")
app.MainLoop()
</code></pre>
<p>运行此代码并按<code>Alt</code>键,按其中一个未加下划线的字母F、E或H,然后使用箭头键或任何带下划线的字母导航菜单</p>
<p>注意:某些功能会自动分配热键,例如Ctrl+Q退出</p>