[wxPython] EVT_CHAR_HOOK troubles...

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[wxPython] EVT_CHAR_HOOK troubles...

Miles Clark

Hi -

I'm attempting to use the CharHook event on a frame to capture all
keyboard events sent to the frame or any of it's child
windows.  OnCharHook() is succesfully called for non-printable characters
(Shift, tab, escape, enter, F1, etc), but NOT called for printable
characters ('a', '1', '%', etc.).

I've tried various approaches (using a wxWindow instead of a wxPanel,
using the wxWANTS_CHARS style on the frame, etc.), with no luck.

Any ideas on what I'm doing wrong?

Thanks!



Sample code:
------------

#!/usr/bin/python

from wxPython.wx import *

class MyFrame(wxFrame):
    def __init__(self, parent, id, title):
        wxFrame.__init__(self, parent, id, title,
                         wxDefaultPosition, wxSize(400, 400))
        self.panel = wxPanel(self, -1)
        wxStaticText(self.panel, -1, "wxTextCtrl", wxPoint(5, 25),
                     wxSize(75, 20))
        self.tc = wxTextCtrl(self.panel, 10, "", wxPoint(80, 25),
                             wxSize(200, 30))
        EVT_CHAR_HOOK(self, self.OnCharHook)
        EVT_CHAR(self, self.OnChar)
        self.panel.Layout()
        return

    def OnCloseWindow(self, event):
        self.Destroy()
        return

    def OnChar(self, event):
        print "OnChar: %d '%c'" % (event.KeyCode(), chr(event.KeyCode()))
        event.Skip()
        return
   
    def OnCharHook(self, event):
        print "OnCharHook: %d" % event.KeyCode()
        event.Skip()
        return


class MyApp(wxApp):
    def OnInit(self):
        frame = MyFrame(None, -1, 'CharHook Test')
        frame.Show(1)
        self.SetTopWindow(frame)
        return 1


if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()



_______________________________________________
wxPython-users maillist  -  [hidden email]
http://starship.python.net/mailman/listinfo/wxpython-users