以下关键事件无效。有什么想法吗?
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, title='testing', size=(300,380), style= wx.MINIMIZE_BOX|wx.SYSTEM_MENU
|wx.CAPTION|wx.CLOSE_BOX|wx.CLIP_CHILDREN)
self.tree = HyperTreeList(self, style = wx.TR_DEFAULT_STYLE |
wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_HAS_VARIABLE_ROW_HEIGHT | wx.TR_HIDE_ROOT)
# create column
self.tree.AddColumn("coll")
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
def OnKeyDown(self, event):
keycode = event.GetKeyCode()
print "keycode ", keycode
if keycode == wx.WXK_ESCAPE:
print "closing"
self.Close()
此致
答案 0 :(得分:2)
这里的问题是树cntrl需要关注,因此所有的keyevent都不是主机,因此绑定到大型机不起作用。所以第一直觉就是绑定到树cntrl,例如
self.tree.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
但是这也行不通,树本身由两个子窗口,一个标题窗口和一个主窗口组成,看到HyperTreeList的代码是什么,这个
self.tree._main_win.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
但这看起来不够优雅并且依赖于HyperTreeList的内部细节,而从CustomTreeCntrl派生的_main_win本身也使用该事件,所以你也必须小心捕捉这些事件。
答案 1 :(得分:0)
如何使用wx.Dialog? wx.Dialog将在按下ESCAPE时立即关闭。查看此文档:http://docs.wxwidgets.org/stable/wx_wxdialog.html#wxdialogsetescapeid