From bbf0cc4edc51da7bef9695f3d0e5c463077fd21f Mon Sep 17 00:00:00 2001 From: mistangl Date: Wed, 17 Jan 2024 16:21:28 +0100 Subject: [PATCH] gui bekommt jetzt die Config mit, um daraus die Texte und Inhalte der Comboboxen usw. aufzubauen --- lib/gui.py | 64 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/lib/gui.py b/lib/gui.py index 7e9c261..016dfa8 100644 --- a/lib/gui.py +++ b/lib/gui.py @@ -81,13 +81,15 @@ class AllFrames(): """ enthält alle gleichen Methoden für die Widgets in der rechte Spalte """ def __init__(self, nrow=0): - self.set_start_rwo(nrow) + self.set_start_row(nrow) self._controller = None def get_rows(self): + """gibt die Anzahl der von diesem Widget belegten Zeilen zurück""" return self.rownum - def set_start_rwo(self, nrow): + def set_start_row(self, nrow): + """setzt für diesen Frame die Anfangszeile""" if nrow < 0: raise Exception("this row can not be set") self.rownum = nrow @@ -98,25 +100,30 @@ class AllFrames(): return self._controller def callback(self, key): + """ruft den Controller und damit die Businesslogic auf, dass dieser key gerade in die Oberfläche gesetzt wurde""" controller = self.get_controller() if controller: controller.callback(key) - def data_to_model(self, controller): + """schreibt die daten in das Modell""" data = self.get_data() controller.set_gui_dict(data) def data_to_model(self, controller, key, value): + """schreibt den Value unter dem key in das Modell""" controller.set_gui_data(key, value) + def set_button_content(self, adict): + pass + class LeftFrameAsm(AllFrames): - def __init__(self, frame, nrow=0): + def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame - self.build_widgets() - - def build_widgets(self): + self.build_widgets(configs) + + def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 @@ -140,12 +147,12 @@ class LeftFrameAsm(AllFrames): self.asm_number.set(data["asm_id"]) class RightFrameLabels(AllFrames): - def __init__(self, frame, nrow=0): + def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame - self.build_widgets() + self.build_widgets(configs) - def build_widgets(self): + def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 @@ -191,21 +198,22 @@ class RightFrameLabels(AllFrames): class RightFramePDM(AllFrames): - def __init__(self, frame, nrow=0): + def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame - self.build_widgets() - - def build_widgets(self): + self.build_widgets(configs) + + def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 # pdmkategorie + categories = configs.Allgemein.get_options("Kategorien") #"Baugruppe", "Einzelteil", "Kaufteil", "NichtSivas", "Normteil", "Schweissbaugruppe" pdmkategorie_label = ttk.Label(frame, text="PDM-Kategorie:" ) pdmkategorie_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=5, pady=5) self.pdm_category = tk.StringVar() pdmkategorie_combo = ttk.Combobox(frame, textvariable=self.pdm_category) - pdmkategorie_combo['values'] = ["Baugruppe", "Einzelteil", "Kaufteil", "NichtSivas", "Normteil", "Schweissbaugruppe"] + pdmkategorie_combo['values'] = categories pdmkategorie_combo['state'] = 'readonly' pdmkategorie_combo.bind('<>', lambda event:self.callback('pdm_kategorie_neu')) pdmkategorie_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5) @@ -226,11 +234,12 @@ class RightFramePDM(AllFrames): self.rownum += 1 # Lebenszyklusstatus + lstatus = configs.Allgemein.get_options("Lebenszyklus") # Serie, Prototyp lebenszyklusstatus_label = ttk.Label(frame, text="Lebenszyklusstatus:") lebenszyklusstatus_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=5, pady=5) self.lebenszyklus_status_neu = tk.StringVar() lebenszyklusstatus_combo = ttk.Combobox(frame, textvariable=self.lebenszyklus_status_neu) - lebenszyklusstatus_combo['values'] = ["Serie", "Prototyp"] + lebenszyklusstatus_combo['values'] = lstatus lebenszyklusstatus_combo['state'] = 'readonly' lebenszyklusstatus_combo.bind('<>', lambda event:self.callback('lebenszyklus_status_neu')) lebenszyklusstatus_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5) @@ -282,10 +291,15 @@ class RightFramePDM(AllFrames): class App(): - def __init__(self, root): + def __init__(self, root, configs=None): """Standardgui mit Baum zur Anwahl der Teile des Assemblies""" self.root = root + self.build_widgets(root, configs) + + def build_widgets(self, root, configs): + """ baue alle Frames der Gui auf + """ # configure the grid # die erste Spalte mit Baum sollte unbeweglich bleiben bei Vergräßerung des Fensters. @@ -303,34 +317,34 @@ class App(): style = ttk.Style(self.root) style.theme_use('classic') - self.lf1 = LeftFrameAsm(left_frame, 0) + self.lf1 = LeftFrameAsm(left_frame, 0, configs) nrows = self.lf1.get_rows() self.lf2 = TreeView(left_frame, nrows) - self.rf0 = RightFrameLabels(right_frame, 0) - nrows = self.rf0.get_rows() - self.rf1 = RightFramePDM(right_frame, nrows) + self.rf1 = RightFrameLabels(right_frame, 0, configs) nrows = self.rf1.get_rows() + self.rf2 = RightFramePDM(right_frame, nrows, configs) + nrows = self.rf2.get_rows() #self.rf2 = RightFramePDM(right_frame, nrows) # TODO usw. def data_from_model(self): - """ methode zum auslesen aller Daten der Oberfläche aus dem Modell + """ methode zum Auslesen aller Daten der Oberfläche aus dem Modell """ self.lf1.data_from_model() self.lf2.data_from_model() - self.rf0.data_from_model() self.rf1.data_from_model() + self.rf2.data_from_model() def set_controller(self, controller): - # merken des Handels auf den Controller in jedem widget + """ merken des Handels auf den Controller in jedem Widget""" self._controller = controller self.lf1.set_controller(controller) self.lf2.set_controller(controller) - self.rf0.set_controller(controller) self.rf1.set_controller(controller) + self.rf2.set_controller(controller) def mainloop(self): self.root.mainloop()