import wx


class MainWindow(wx.Frame):
    """ This window displays a variety of GUI Widgets. """
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, size = (800,600), style=wx.DEFAULT_FRAME_STYLE|wx.NO_FULL_REPAINT_ON_RESIZE)
        self.SetBackgroundColour(wx.WHITE)

        mainSizer = wx.BoxSizer(wx.VERTICAL)

        hSizer = wx.BoxSizer(wx.HORIZONTAL)

        self.btn1 = wx.Button(self, -1, "This is a button")
        hSizer.Add(self.btn1, 1, wx.LEFT | wx.RIGHT, 5)
        self.btn1.Bind(wx.EVT_BUTTON, self.OnEvent)
        self.btn1.Bind(wx.EVT_MOTION, self.OnEvent)

        self.txt1 = wx.TextCtrl(self, -1, "This is a TextCtrl")
        hSizer.Add(self.txt1, 1, wx.RIGHT, 5)
        self.txt1.Bind(wx.EVT_KEY_DOWN, self.OnEvent)
        self.txt1.Bind(wx.EVT_CHAR, self.OnEvent)
        self.txt1.Bind(wx.EVT_KEY_UP, self.OnEvent)
        self.txt1.Bind(wx.EVT_MOTION, self.OnEvent)

        mainSizer.Add(hSizer, 0, wx.TOP | wx.BOTTOM, 5)

        self.txtCtrl = wx.TextCtrl(self, -1, "Text Control", style=wx.TE_LEFT | wx.TE_MULTILINE)
        mainSizer.Add(self.txtCtrl, 1, wx.EXPAND | wx.ALL, 5)

        self.txtCtrl.Clear()
        self.txtCtrl.AppendText('Type             event.GetId()    event.GetEventObject().GetId()     self.btn1.GetId()   self.txt1.GetId() \n')

        self.SetSizer(mainSizer)
        self.SetAutoLayout(True)
        self.Layout()
        # Status Bar
        self.CreateStatusBar()
        self.SetStatusText("Status Bar")
        self.Show(True)

    def OnEvent(self, event):

       event.Skip()

       if event.GetEventType() == wx.wxEVT_COMMAND_BUTTON_CLICKED:
          self.txtCtrl.AppendText("EVT_BUTTON  ")
       elif event.GetEventType() == wx.wxEVT_MOTION:
          self.txtCtrl.AppendText("EVT_MOTION  ")
       elif event.GetEventType() == wx.wxEVT_KEY_DOWN:
          self.txtCtrl.AppendText("EVT_KEY_DOWN")
       elif event.GetEventType() == wx.wxEVT_CHAR:
          self.txtCtrl.AppendText("EVT_CHAR    ")
       elif event.GetEventType() == wx.wxEVT_KEY_UP:
          self.txtCtrl.AppendText("EVT_KEY_UP  ")
       else:
          self.txtCtrl.AppendText("%8d" % event.GetEventType())

       self.txtCtrl.AppendText("     %4d                    %4d                                               %4d           %4d \n" % ( event.GetId(), event.GetEventObject().GetId(), self.btn1.GetId(), self.txt1.GetId() ))


class MyApp(wx.App):
    def OnInit(self):
        dlg = MainWindow(None, "MiniApp")
        self.SetTopWindow(dlg)
        return True
      

app = MyApp(0)
app.MainLoop()
