我有一个 wxpython 桌面应用程序,我使用的是 python 2.7 和 wxpython 2.8。
我知道如何将加速键表添加到菜单项,但我想在用户按下某个键组合而没有菜单项时触发一个事件。用户可以将焦点放在我的 UI 中的任何字段上,但是当他按下(例如)CTRL-L 时,应该会触发一个事件。这该怎么做 ?
谢谢你的帮助
您总是需要将您的加速器表项绑定到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,您应该会看到事件处理程序触发,并且控制台窗口中会出现一些文本。
您可以在此处阅读有关加速器的更多信息:
| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |