使用没有menuitem的加速器表

时间:2014-08-26 15:58:41

标签: python wxpython

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

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

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

您始终需要将加速器表项绑定到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()

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

您可以在此处详细了解加速器: