1

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()
Kohonick
  • 51
  • 1
  • 7
  • `print(sys.argv)` are these the parameters you need? – Torxed Apr 25 '14 at 07:53
  • Ah never mind, now i see what you mean :P – Torxed Apr 25 '14 at 07:56
  • No, look here: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")) – Kohonick Apr 25 '14 at 07:57
  • sorry, i am still learning StackOverFlow :D – Kohonick Apr 25 '14 at 07:57
  • No problem, but what exactly do you WANT to do.. save all settings in between sessions? Or are you having trouble using your values from within the GUI and pass them to your program? – Torxed Apr 25 '14 at 07:57
  • So again: for example i want to have the value from a textfield of the GUI, because there is a Date what i need for running my program. – Kohonick Apr 25 '14 at 07:58
  • Yes, but my question is do you need help getting that textfield value? save it to disk or pass it to your 3:d application? – Torxed Apr 25 '14 at 07:59
  • I know how to get this value. I can use the getValue() .. but what is the best way for more than 20 values? And how can i save it? – Kohonick Apr 25 '14 at 08:00

2 Answers2

0

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.
  • 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.

EvertW
  • 1,160
  • 9
  • 18
0

There are ways to get the class objects and iterate over them.
But i'd suggest a restructure of the code and consider a container for your graphical elements instead, like this:

self.frames = {}

self.frames['_3_menubar'] = wx.MenuBar()
self.frames['frame_3_statusbarr'] = self.CreateStatusBar(1, 0)
self.frames['kartei'] = wx.Notebook(self, wx.ID_ANY, style=0)
self.frames['pane_all_settings'] = wx.Panel(self.kartei, wx.ID_ANY)
self.frames['label_5'] = wx.StaticText(self.pane_all_settings, wx.ID_ANY, _("Laufzeiteinstellungen"))
#... Etc etc, the rest of the objects

# And do something like this not only for your own sake
# But for getting rid huge amounts of code that can be compressed into stuff like this.
for item in ('Beenden', 'Datei', 'Bearbeiten', 'Dokumentationen', 'Hilfe'):
    self.frames['_3_menubar'].Append(wxglade_tmp_menu, _(item))

With this you can simply do:

def getAllValues(self):
    for frame in self.frames:
        value = self.getValue(self.frames[frame])
        yield (frame, value)

Or something similar, not sure what you want to do with the values but you could do:

def saveAllValues(self):
    with open('settings.ini', 'w') as fh:
        for frame, value in self.getAllValues():
            fh.write(frame + ':' + str(value) + '\n')
Torxed
  • 22,866
  • 14
  • 82
  • 131
  • Okay - thank you. No the big Qustion: How can i save my Values for next time? – Kohonick Apr 25 '14 at 12:19
  • @user3455995 `settings.ini` will contain all the values, just do `with open('settings.ini', 'r') as fh:` and do `for line in fh` and you get each individual setting again :) – Torxed Apr 25 '14 at 12:46