Variablen aus der GUI in das eigentliche Programm überführen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Kohonick
User
Beiträge: 7
Registriert: Sonntag 27. Oktober 2013, 17:52
Wohnort: Düsseldorf

Guten Morgen,

bin derzeit an einer kleinen Datenfräse ( mit GUI) die einige Paramter für den Ablauf benötigt. Diese Paramter sollen über eine GUI definiert werden und möglichst gespeichert werden sodass beim nächsten Aufruf der Anwendung nicht von Vorne konfiguriert werden muss.
Ich bin Azubi, meine Ausbilder im Urlaub und ich soll mal machen. Die GUI habe ich noch nicht ganz Fertig, aber ausreichend das ich Anfangen kann sie mit dem "Code zu verbinden".
Nun fehlen mir aber die Ideen. Ein Kollege hat mir gerade die Anwendung über eine *.ini Datei zu steuern und mit der GUI nur die INI zu bearbeiten. Diesen Weg finde ich irgendwie "geschumelt".
Habt Ihr einige Ideen?
Wenn ja, wie würdet Ihr es lösen? Eine Klasse "Settings" die alle Variablen aufnimmt und an die entsprechenden Klassen der Datenfräse verteilt?
Mir gehen hier gerade wirklich die Ideen aus und ich würde das alles gerne am Wochenende ein paar Meter vorwärts bringen.
Also schon einmal VIELEN DANK im Voraus



Hier mein Code der GUI (wxGlade):

Code: Alles auswählen

#!/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()
~Choose a job you love and you will never work a day in your live!~
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo Kohonick,
das sind doch schonmal gute Ansätze: eine ini-Datei, in der die Settings gespeichert werden und eine Settings-Klasse, die die Werte den Objekten, die sie brauchen bereitstellt. Zum Programm an sich noch ein paar Bemerkungen: Wenn Du die Widgets gleich in ein Grid einfügst, brauchst Du nicht jedes Label unnötigerweise an ein Attribut zu binden, zumal Du es sonst nicht wieder brauchst. Bei den Nummern in den Variablennamen solltest Du Dir überlegen, warum sie so nummeriert sind, oder ob es nicht doch einen besseren Namen dafür gibt (ohne Nummer). Statt doppelte Unterstriche nimm besser nur einfache, dann ein einfacher Unterstrich kennzeichnet schon genug, dass die Methode nur für den Internen Gebrauch gedacht ist.
BlackJack

@Sirius3: Diese Codewüsete ist generierter Quelltext. Achte mal auf die ``wxglade``-Kommentare.
Antworten