Tab Event and NavigationKeyEvent.IsForward

To whom it may concern,

Hello, I am capturing key events in a particular control. When the
enter key is pressed I call event.m_keyCode = wx.WXK_TAB. That's great,
but then I would like navigation to go to the next field. Here's my
code:

def onEnterHours(self, event):
        if event.GetKeyCode() == 13: #Enter Key
            event.m_keyCode = wx.WXK_TAB
            self.Navigate(wx.NavigationKeyEvent.IsForward)
        else:
            event.Skip()

after the event.m_keyCode = wx.WXK_TAB, the
NavigationKeyEvent.IsForward, doesn't seem to move forward.

Maybe someone out there knows what I'm doing wrong?

Thank you very much,

Keith Bolton

Keith Bolton wrote:

To whom it may concern,

Hello, I am capturing key events in a particular control. When the
enter key is pressed I call event.m_keyCode = wx.WXK_TAB. That's great,
but then I would like navigation to go to the next field. Here's my
code:

def onEnterHours(self, event):
        if event.GetKeyCode() == 13: #Enter Key
            event.m_keyCode = wx.WXK_TAB
            self.Navigate(wx.NavigationKeyEvent.IsForward)
        else:
            event.Skip()

after the event.m_keyCode = wx.WXK_TAB, the
NavigationKeyEvent.IsForward, doesn't seem to move forward.

Maybe someone out there knows what I'm doing wrong?

I don't know what you are doing wrong, it may be somewhere else in your program. Changing the value of event.m_keyCode should have no effect since Navigate creates a new event to do the navigation.

This works for me:

import wx

class EnterIsTabTextCtrl(wx.TextCtrl):
     def __init__(self, parent, ID=-1, value="",
                  pos=wx.DefaultPosition, size=wx.DefaultSize,
                  style=0, validator=wx.DefaultValidator, name="mytext"):
         wx.TextCtrl.__init__(self, parent, ID, value, pos, size,
                              style, validator, name)

         self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)

     def OnKeyDown(self, evt):
         if evt.GetKeyCode() == wx.WXK_RETURN:
             self.Navigate()
         else:
             evt.Skip()

class TestFrame(wx.Frame):
     def __init__(self):
         wx.Frame.__init__(self, None, title="TestFrame")

         p = wx.Panel(self)
         fgs = wx.FlexGridSizer(3, 3, 5, 5)
         for x in range(12):
             t = EnterIsTabTextCtrl(p, -1, str(x))
             fgs.Add(t)

         p.SetSizer(fgs)

app = wx.PySimpleApp()
frame = TestFrame()
frame.Show()
app.MainLoop()

···

--
Robin Dunn
Software Craftsman
http://wxPython.org Java give you jitters? Relax with wxPython!