我有一个wxpython桌面应用程序,我正在使用python 2.7和wxpython 2.8。
我知道如何将加速器表添加到菜单项,但我想在用户按下某个键组合而没有菜单项时触发事件。 用户可以关注我的UI中的任何字段,但是当他按下(例如)CTRL-L时,应该触发事件。怎么做?
感谢您的帮助
答案 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,您应该看到事件处理程序触发,并且一些文本出现在控制台窗口中。
您可以在此处详细了解加速器: