从程序中的GUI获取变量

时间:2014-04-25 07:52:02

标签: python user-interface wxpython ini wxglade

首先,对不起我的英语 - 我还在学习。我是来自德国的学生,我学习Python。

我有一个程序,需要很多参数才能运行,所以我用wxGlade构建了一个gui。现在我想在我的应用程序中得到这个参数。我看到了一些东西。他们使用GUI编辑INI文件。应用程序从这些INI中获取参数。但这不是我想要的。我想用GUI控制我的应用程序。 并且非常重要的是我可以在GUI中保存我的值(以便用户不应该再次执行所有操作)。

希望你理解我的意思。 这是我的Gui代码(尚未准备就绪,但它足以完成第一步)

这是我的GUI代码:

    #!/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()

2 个答案:

答案 0 :(得分:0)

我建议你做以下事情:

  • 使用字典接收所有初始值。让字典中的名称映射到变量的名称。
  • 允许其他模块使用Observer Pattern订阅此GUI。
  • 当任何更改或按下按钮时,请创建包含更改的字典,并通知所有订阅者更改。

这使GUI与程序的其余部分完全分开。

答案 1 :(得分:0)

有多种方法可以获取类对象并迭代它们 但我建议重新构建代码并考虑使用图形元素的容器,如下所示:

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))

有了这个你就可以做到:

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

或者类似的东西,不知道你想对这些值做什么,但你可以这样做:

def saveAllValues(self):
    with open('settings.ini', 'w') as fh:
        for frame, value in self.getAllValues():
            fh.write(frame + ':' + str(value) + '\n')