我试过了EVT_KEY_DOWN但是没有用。有没有办法捕获任何击键,如F1,F2,ENTER和其他。我正在使用框架和面板。
答案 0 :(得分:3)
我在对话框子类中使用了EVT_KEY_DOWN。在对话框类的__init__
方法中,绑定到EVT_KEY_DOWN:
def __init__(self, ....):
# ...other init code...
self.Bind(wx.wx.EVT_KEY_UP, self.handle_key_up)
然后在对话框中提供一个方法,如:
def handle_key_up(self, event):
keycode = event.GetKeyCode()
lc = self.list_ctrl_fields
# handle F2
if keycode == wx.WXK_F2:
print "got F2"
(在python 2.6中测试,wxPython 2.8.10。)
答案 1 :(得分:3)
显然,如果需要,您可以合并事件方法。
此主题没有太多内容,但this link和this link帮助了我(同一网站)
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Global Keypress")
self.panel = wx.Panel(self, wx.ID_ANY)
self.CreateStatusBar()
# Global accelerators
id_F1 = wx.NewId()
id_F2 = wx.NewId()
self.Bind(wx.EVT_MENU, self.pressed_F1, id=id_F1)
self.Bind(wx.EVT_MENU, self.pressed_F2, id=id_F2)
accel_tbl = wx.AcceleratorTable([
(wx.ACCEL_NORMAL, wx.WXK_F1, id_F1 ),
(wx.ACCEL_NORMAL, wx.WXK_F2, id_F2 )
])
self.SetAcceleratorTable(accel_tbl)
def pressed_F1(self, event):
print "Pressed F1"
return True
def pressed_F2(self, event):
print "Pressed F2"
return True
if __name__ == "__main__":
app = wx.PySimpleApp()
f = MyFrame().Show()
app.MainLoop()
答案 2 :(得分:1)