Test keyboard/mouse event.
sub class can get all event(keyboard/mouse)
but top class cann't get all event. only can get wx.EVT_ENTER_WINDOW
and wx.EVT_LEAVE_WINDOW event.
My requirement is:
top class and sub class both can get all(keyboard/mouse) event.
or top class can get all event.
My debug code:
#!/usr/bin/env python
import wx
class MyView(wx.Window):
def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
size=wx.DefaultSize,
style=wx.BORDER_SUNKEN):
wx.Window.__init__(self, parent, id, (0, 0), (-1, 300), style=style)
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
self.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow)
self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow)
def OnEnterWindow(self, event):
print "On Enter Window -------"
def OnLeaveWindow(self, event):
print "On Leave Window -------"
def OnKeyDown(self, event):
print "on key down --------", event.GetKeyCode()
event.Skip()
def OnLeftUp(self, event):
print "on left up --------"
event.Skip()
class MyPanel(wx.Panel):
def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=wx.NO_BORDER ):
wx.Panel.__init__(self, parent, id, pos, size, style=style)
bs = wx.BoxSizer(wx.VERTICAL)
self.view = MyView(self)
bs.Add(self.view, 1, wx.EXPAND)
self.SetSizer(bs)
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "", size=(800, 600),
style=wx.DEFAULT_FRAME_STYLE)
panel = wx.Panel(self, size=self.GetSize())
self.view = MyPanel(panel)
cmd_box = wx.BoxSizer(wx.HORIZONTAL)
b_close = wx.Button(panel, -1, label="Close")
cmd_box.Add(b_close, 0, wx.ALIGN_CENTER)
main_box = wx.BoxSizer(wx.VERTICAL)
main_box.Add(self.view, 1, wx.EXPAND)
main_box.Add(cmd_box, 0, wx.ALIGN_CENTER)
self.SetSizer(main_box)
self.Bind(wx.EVT_BUTTON, self.OnClose, b_close)
# debug event
self.view.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow)
self.view.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow)
self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
panel.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
panel.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
self.view.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.view.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
self.Bind(wx.EVT_CLOSE, self.OnClose)
def OnKeyDown(self, event):
print "on key down ==========", event.GetKeyCode()
def OnLeftUp(self, event):
print "left on up click ========="
def OnLeftDown(self, event):
print "left on down click ========"
def OnEnterWindow(self, event):
print "On Enter Window =========="
def OnLeaveWindow(self, event):
print "On Leave Window ========="
def OnClose(self, event):
self.Destroy()
event.Skip()
class App(wx.App):
def OnInit(self):
self.frame = Frame()
self.frame.Show(True)
return True
def main():
app = App()
app.MainLoop()
if __name__ == '__main__':
main()
test_event.py (2.92 KB)
···
--
jiang zhixiang