import wx

APP_NAME = "Basic wxPython user interface"

class MainFrame(wx.Frame):
    def __init__(self):
        """
        Initialize main window.
        """
        wx.Frame.__init__(self, None, wx.ID_ANY, APP_NAME)
        #self.SetTitle(APP_NAME)
        self._init_controls()
        self._init_menu()
        self._init_status_bar()

    def _init_controls(self):
        grid = wx.FlexGridSizer(rows=1, cols=2)
        grid.AddGrowableCol(idx=1, proportion=1)
        button1 = wx.Button(self, wx.ID_ANY, "Click me")
        self.text1 = wx.TextCtrl(self, wx.ID_ANY, "Click the button")
        grid.Add(button1, 0, wx.CENTER)
        grid.Add(self.text1, 1, wx.EXPAND)
        self.Bind(wx.EVT_BUTTON, self.on_button1, id=button1.GetId())
        self.SetSizer(grid)

    def _init_menu(self):
        # File menu
        menu_file = wx.Menu()
        file_exit = menu_file.Append(wx.ID_ANY, "E&xit", "Exit program")
        self.Bind(wx.EVT_MENU, self.on_menu_file_exit, id=file_exit.GetId())
        
        # Menu bar
        menu_bar = wx.MenuBar()
        menu_bar.Append(menu_file,"&File")
        self.SetMenuBar(menu_bar)

    def _init_status_bar(self):
        self.status_bar = wx.StatusBar(self)
        self.SetStatusBar(self.status_bar)
    
    def on_button1(self, event):
        self.text1.SetValue("Thanks.")

    def on_menu_file_exit(self, event):
        self.Close()

def start_gui():
    app = wx.App()
    frame = MainFrame()
    frame.Show(1)
    app.MainLoop()

if __name__ == "__main__":
    start_gui()
