Get variables from the GUI in program
Question: first, sorry for my english - im still learning. I´m a student from Germany
and i learn Python.

I have a program which needs a lot of paramters for running so i build a gui
by wxGlade. Now i want to get this paramters in my application. I saw some
things. They used the GUI for editing a INI- File. And the application gets
the paramters from these INI. But this is not what i want. I want to controll
my application with the GUI. And it is very Important that i can save my
Values in the GUI (so that the User should not do everything again).

Hope you understand what i mean. Here is my Code for the Gui (not ready but it
is enough for doing the first steps)

Here is my GUI Code:

    
    
        #!/usr/bin/env python
        # -*- coding: UTF-8 -*-
        #
        # generated by wxGlade 0.6.8 (standalone edition) on Thu Apr 24 12:36:34 2014
        #
    
        import wx
    
        # begin wxGlade: dependencies
        import gettext
        # end wxGlade
    
        # begin wxGlade: extracode
        # end wxGlade
    
    
        class MyFrame(wx.Frame):
            def __init__(self, *args, **kwds):
                # begin wxGlade: MyFrame.__init__
                kwds["style"] = wx.DEFAULT_FRAME_STYLE
                wx.Frame.__init__(self, *args, **kwds)
    
                # Menu Bar
                self.frame_3_menubar = wx.MenuBar()
                wxglade_tmp_menu = wx.Menu()
                wxglade_tmp_menu.Append(wx.ID_ANY, _("Beenden"), "", wx.ITEM_NORMAL)
                self.frame_3_menubar.Append(wxglade_tmp_menu, _("Datei"))
                wxglade_tmp_menu = wx.Menu()
                self.frame_3_menubar.Append(wxglade_tmp_menu, _("Bearbeiten"))
                wxglade_tmp_menu = wx.Menu()
                wxglade_tmp_menu.Append(wx.ID_ANY, _("Dokumenationen"), "", wx.ITEM_NORMAL)
                self.frame_3_menubar.Append(wxglade_tmp_menu, _("Hilfe"))
                self.SetMenuBar(self.frame_3_menubar)
                # Menu Bar end
                self.frame_3_statusbarr = self.CreateStatusBar(1, 0)
                self.kartei = wx.Notebook(self, wx.ID_ANY, style=0)
                self.pane_all_settings = wx.Panel(self.kartei, wx.ID_ANY)
                self.label_5 = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("Laufzeiteinstellungen"))
                self.label_6 = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("Abrechnungsjahr"))
                self.abr_jahr = wx.SpinCtrl(self.pane_all_settings, wx.ID_ANY, "", min=2000, max=2099, style=wx.SP_ARROW_KEYS | wx.TE_AUTO_URL)
                self.label_7 = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("Abrechnungmonat"))
                self.abr_monat = wx.SpinCtrl(self.pane_all_settings, wx.ID_ANY, "", min=1, max=12)
                self.label_8 = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("Payroll"))
                self.payroll = wx.ComboBox(self.pane_all_settings, wx.ID_ANY, choices=[_("Loga"), _("Sage"), _("SAP"), _("KidiCap"), _("fidelis Personal")], style=wx.CB_DROPDOWN)
                self.label_1 = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("Mandant"))
                self.mandant = wx.SpinCtrl(self.pane_all_settings, wx.ID_ANY, "1", min=0, max=999, style=wx.SP_ARROW_KEYS | wx.TE_AUTO_URL)
                self.zuschlag = wx.CheckBox(self.pane_all_settings, wx.ID_ANY, _(u"Zuschl\xe4ge"))
                self.fehlzeit = wx.CheckBox(self.pane_all_settings, wx.ID_ANY, _("Fehlzeiten"))
                self.urlaub = wx.CheckBox(self.pane_all_settings, wx.ID_ANY, _(u"Urlaubsanspr\xfcche"))
                self.soll = wx.CheckBox(self.pane_all_settings, wx.ID_ANY, _("Sollstunden"))
                self.label_8_copy_1 = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("ImpVar"))
                self.dir_impvar = wx.TextCtrl(self.pane_all_settings, wx.ID_ANY, "")
                self.label_8_copy_2 = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("ImpUbr"))
                self.dir_impubr = wx.TextCtrl(self.pane_all_settings, wx.ID_ANY, "")
                self.label_8_copy_1_copy = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("Pfad zur ImpVar"))
                self.dir_impvar_copy = wx.TextCtrl(self.pane_all_settings, wx.ID_ANY, "")
                self.label_8_copy_1_copy_copy = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("Pfad zur ImpUbr"))
                self.dir_impvar_copy_1 = wx.TextCtrl(self.pane_all_settings, wx.ID_ANY, "")
                self.label_8_copy_1_copy_copy_copy = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("Ausgabeverzeichnis"))
                self.dir_impvar_copy_2 = wx.TextCtrl(self.pane_all_settings, wx.ID_ANY, "")
                self.button_1 = wx.Button(self.pane_all_settings, wx.ID_ANY, _("Exportieren"))
                self.button_1_copy = wx.Button(self.pane_all_settings, wx.ID_ANY, _("Abbrechen"))
                self.pan_loga = wx.Panel(self.kartei, wx.ID_ANY)
                self.label_5_copy = wx.StaticText(self.pan_loga, wx.ID_ANY, _("Exportieren nach Loga"))
                self.label_6_copy = wx.StaticText(self.pan_loga, wx.ID_ANY, _("Loga-Mandant"))
                self.loga_mandant = wx.SpinCtrl(self.pan_loga, wx.ID_ANY, "1", min=0, max=1000000, style=wx.SP_ARROW_KEYS | wx.TE_AUTO_URL)
                self.label_7_copy = wx.StaticText(self.pan_loga, wx.ID_ANY, _("Loga-Abrechnungskreis"))
                self.loga_al = wx.SpinCtrl(self.pan_loga, wx.ID_ANY, "", min=0, max=100)
                self.label_8_copy = wx.StaticText(self.pan_loga, wx.ID_ANY, _("Empty"))
                self.combo_box_1_copy = wx.ComboBox(self.pan_loga, wx.ID_ANY, choices=[], style=wx.CB_DROPDOWN)
                self.label_1_copy = wx.StaticText(self.pan_loga, wx.ID_ANY, _(u"Personalnummer f\xfcllen"))
                self.loga_fill_pnr = wx.SpinCtrl(self.pan_loga, wx.ID_ANY, "1", min=0, max=999, style=wx.SP_ARROW_KEYS | wx.TE_AUTO_URL)
                self.konv_loa = wx.CheckBox(self.pan_loga, wx.ID_ANY, _("Konvertierungslohnart"))
                self.konv_fehl = wx.CheckBox(self.pan_loga, wx.ID_ANY, _("Konvertierungsfehlzeiten"))
                self.zeitraum_fehl = wx.CheckBox(self.pan_loga, wx.ID_ANY, _("Zeitraum Fehlzeit"))
                self.vertragsnummer = wx.CheckBox(self.pan_loga, wx.ID_ANY, _(u"Vertragsnummer ber\xfccksichtigen"))
                self.notebook_2_pane_3 = wx.Panel(self.kartei, wx.ID_ANY)
                self.notebook_2_pane_4 = wx.Panel(self.kartei, wx.ID_ANY)
                self.notebook_2_pane_5 = wx.Panel(self.kartei, wx.ID_ANY)
                self.notebook_2_pane_6 = wx.Panel(self.kartei, wx.ID_ANY)
                self.notebook_2_pane_7 = wx.Panel(self.kartei, wx.ID_ANY)
    
                self.__set_properties()
                self.__do_layout()
    
                self.Bind(wx.EVT_MENU, self.stopExport, id=wx.ID_ANY)
                self.Bind(wx.EVT_BUTTON, self.startExport, self.button_1)
                self.Bind(wx.EVT_BUTTON, self.stopExport, self.button_1_copy)
                # end wxGlade
    
            def __set_properties(self):
                # begin wxGlade: MyFrame.__set_properties
                self.SetTitle(_("TDA Export Manager 0.12"))
                self.frame_3_statusbarr.SetStatusWidths([-1])
                # statusbar fields
                frame_3_statusbarr_fields = [_("(C) TDA-HR-Software Entwicklungs GmbH")]
                for i in range(len(frame_3_statusbarr_fields)):
                    self.frame_3_statusbarr.SetStatusText(frame_3_statusbarr_fields[i], i)
                self.payroll.SetSelection(-1)
                # end wxGlade
    
            def __do_layout(self):
                # begin wxGlade: MyFrame.__do_layout
                sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
                grid_sizer_2_copy = wx.FlexGridSizer(10, 4, 0, 0)
                grid_sizer_2 = wx.FlexGridSizer(10, 4, 0, 0)
                grid_sizer_2.Add(self.label_5, 0, wx.ALL, 10)
                grid_sizer_2.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2.Add(self.label_6, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.abr_jahr, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.label_7, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.abr_monat, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.label_8, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.payroll, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.label_1, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.mandant, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.zuschlag, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.fehlzeit, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.urlaub, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.soll, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.label_8_copy_1, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.dir_impvar, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.label_8_copy_2, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.dir_impubr, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.label_8_copy_1_copy, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.dir_impvar_copy, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.label_8_copy_1_copy_copy, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.dir_impvar_copy_1, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.label_8_copy_1_copy_copy_copy, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.dir_impvar_copy_2, 0, wx.ALL, 10)
                grid_sizer_2.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2.Add(self.button_1, 0, wx.ALL, 10)
                grid_sizer_2.Add(self.button_1_copy, 0, wx.ALL, 10)
                self.pane_all_settings.SetSizer(grid_sizer_2)
                grid_sizer_2_copy.Add(self.label_5_copy, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.label_6_copy, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.loga_mandant, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.label_7_copy, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.loga_al, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.label_8_copy, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.combo_box_1_copy, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.label_1_copy, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.loga_fill_pnr, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.konv_loa, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.konv_fehl, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.zeitraum_fehl, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add(self.vertragsnummer, 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                grid_sizer_2_copy.Add((20, 20), 0, wx.ALL, 10)
                self.pan_loga.SetSizer(grid_sizer_2_copy)
                self.kartei.AddPage(self.pane_all_settings, _("Allgemeine Einstellungen"))
                self.kartei.AddPage(self.pan_loga, _("Loga"))
                self.kartei.AddPage(self.notebook_2_pane_3, _("Sage"))
                self.kartei.AddPage(self.notebook_2_pane_4, _("SAP"))
                self.kartei.AddPage(self.notebook_2_pane_5, _("KidiCap"))
                self.kartei.AddPage(self.notebook_2_pane_6, _("fidelis Personal"))
                self.kartei.AddPage(self.notebook_2_pane_7, _("Konvertierungsfehlzeiten"))
                sizer_2.Add(self.kartei, 1, wx.EXPAND, 0)
                self.SetSizer(sizer_2)
                sizer_2.Fit(self)
                self.Layout()
                # end wxGlade
    
            def startExport(self, event):  # wxGlade: MyFrame.<event_handler>
                abrjahr = self.abr_jahr.GetValue()
                print  abrjahr
    
            def stopExport(self, event):  # wxGlade: MyFrame.<event_handler>
                self.Close()
    
    
        # end of class MyFrame
    
    
    
        if __name__ == "__main__":
            gettext.install("app") # replace with the appropriate catalog name
            app = wx.PySimpleApp(0)
            wx.InitAllImageHandlers()
            frame_3 = MyFrame(None, wx.ID_ANY, "")
            app.SetTopWindow(frame_3)
            frame_3.Show()
            app.MainLoop()
    


Answer: I would suggest you do the following:

  * Use a dictionary to receive all the initial values. Let the names in the dictionary map to the names of your variables.
  * Allow other modules to subscribe to this GUI using the [Observer Pattern](https://en.wikipedia.org/wiki/Observer_pattern).
  * When anything changes, or when the buttons are pressed, create a dictionary with the changes and notify all subscribers of the change.

This keeps the GUI cleanly separated from the rest of the program.

