我有一个wxpython桌面应用程序,我使用python2.7和wxpython2.8。
我知道如何将加速表添加到菜单项中,但是当用户按下某个键的组合而没有菜单项时,我想触发一个事件。用户可以将焦点放在UI中的任何字段上,但是当他按下(例如)CTRL时,应该触发一个事件。怎么做?
谢谢你的帮助
发布于 2014-08-26 17:49:58
您总是需要将加速器表项绑定到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,就会看到事件处理程序的触发,控制台窗口中会出现一些文本。
你可以在这里读到更多关于加速器的信息:
https://stackoverflow.com/questions/25510209
复制相似问题