使用没有菜单项的加速器表

ege*_*ato 2 python wxpython

我有一个 wxpython 桌面应用程序,我使用的是 python 2.7 和 wxpython 2.8。

我知道如何将加速键表添加到菜单项,但我想在用户按下某个键组合而没有菜单项时触发一个事件。用户可以将焦点放在我的 UI 中的任何字段上,但是当他按下(例如)CTRL-L 时,应该会触发一个事件。这该怎么做 ?

谢谢你的帮助

Mik*_*oll 5

您总是需要将您的加速器表项绑定到wx.EVT_MENU,但 wxPython 不要求您使用菜单项对象。这是一个简单的例子:

import wx

class MyForm(wx.Frame):

    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial", size=(500,500))

        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        randomId = wx.NewId()
        self.Bind(wx.EVT_MENU, self.onKeyCombo, id=randomId)
        accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL,  ord('Q'), randomId )])
        self.SetAcceleratorTable(accel_tbl)

        text = wx.TextCtrl(panel)
        text.SetFocus()

    #----------------------------------------------------------------------
    def onKeyCombo(self, event):
        """"""
        print "You pressed CTRL+Q!"

# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我们只是创建一个随机 id,将该 id 绑定到一个事件处理程序,然后创建一个将触发该处理程序的加速器,在本例中是 CTRL+Q。为了让事情更有趣,我添加了一个文本控件小部件并将焦点设置在它上面。然后,如果您按 CTRL+Q,您应该会看到事件处理程序触发,并且控制台窗口中会出现一些文本。

您可以在此处阅读有关加速器的更多信息: