From 26f1820a724b91e6ec47b5c499637ccbbd7fdf19 Mon Sep 17 00:00:00 2001 From: mistangl Date: Mon, 15 Jan 2024 17:12:38 +0100 Subject: [PATCH] =?UTF-8?q?erste=20Fassung=20mit=20Refresh=20der=20Gui=20u?= =?UTF-8?q?nd=20R=C3=BCckmeldung=20an=20User?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/CreoMigrateGui.py | 77 ++++++++++++++++++++++--------------------- lib/caditem.py | 9 ++--- lib/controller.py | 30 +++-------------- lib/test_gui.py | 14 ++++---- 4 files changed, 57 insertions(+), 73 deletions(-) diff --git a/lib/CreoMigrateGui.py b/lib/CreoMigrateGui.py index 0eaa4aa..914a15b 100644 --- a/lib/CreoMigrateGui.py +++ b/lib/CreoMigrateGui.py @@ -9,7 +9,6 @@ from caditem import CadItem #logger = logging.getLogger(__name__) class TreeView(): def __init__(self, frame): - self.controller = None # a treeview # hier Anzahl der sichtbaren Zeilen des Baums angeben: self.tree = ttk.Treeview(frame, height=40) @@ -62,10 +61,10 @@ class TreeView(): self.tree.tag_configure('good', background='white') self.tree.tag_configure('missing', background='red') - def data_from_model(self): - parent_children_mapping = self.controller.get_parent_children() - red_ids = self.controller.get_red_ids() - self.create(parent_children_mapping, red_ids) + def data_from_model(self, controller): + parent_children_mapping = controller.get_parent_children() + red_ids = controller.get_red_ids() + self.refresh(parent_children_mapping, red_ids) def item_selected(self, event): """callback of TK if an item in the tree has been selected @@ -73,26 +72,34 @@ class TreeView(): cid = self.tree.selection()[0] # trage die neue ID ins Modell ein self.controller.set_gui_data('teilenummer', cid) - - # for selected_item in self.tree.selection(): - # item = self.tree.item(selected_item) - # record = item['values'] - # messagebox.showinfo(title='Information', message=','.join(record)) + self.controller.refresh_gui() def get_handle(self): return self.tree +class AllRightFrames(): + def __init__(self, frame, nrow=0): + self.frame = frame + self.build_widgets() + self.set_start_rwo(nrow) + + def get_rows(self): + return self.rownum + def set_start_rwo(self, nrow): + if nrow < 0: + raise Exception("this row can not be set") + self.rownum = nrow + + def data_to_model(self, controller): + data = self.get_data() + controller.set_gui_dict(data) class RightFrameLabels(): def __init__(self, frame, nrow=0): - self.controller = None self.frame = frame - self.build_gui() + self.build_widgets() self.set_start_rwo(nrow) - def set_controller(self, controller): - self.controller = controller - def get_rows(self): return self.rownum def set_start_rwo(self, nrow): @@ -100,7 +107,7 @@ class RightFrameLabels(): raise Exception("this row can not be set") self.rownum = nrow - def build_gui(self): + def build_widgets(self): frame = self.frame self.rownum = 0 col_left = 0 @@ -138,20 +145,19 @@ class RightFrameLabels(): "teilennummer": self.teilenummer_text.get(), } - def data_to_model(self): + def data_to_model(self, controller): data = self.get_data() - self.controller.set_gui_dict(data) + controller.set_gui_dict(data) - def data_from_model(self): - data = self.controller.get_all_gui_data() + def data_from_model(self, controller): + data = controller.get_all_gui_data() if 'teilenummer' in data: self.teilenummer_text.set(data["teilenummer"]) class RightFramePDM(): def __init__(self, frame, nrow=0): - self.controller = None self.frame = frame - self.build_gui() + self.build_widgets() self.set_start_rwo(nrow) def get_rows(self): @@ -161,7 +167,7 @@ class RightFramePDM(): raise Exception("this row can not be set") self.rownum = nrow - def build_gui(self): + def build_widgets(self): frame = self.frame self.rownum = 4 col_left = 0 @@ -229,15 +235,15 @@ class RightFramePDM(): "zusatzinfos_txt_neu": self.zusatzinfos_text.get(), } - def data_to_model(self): + def data_to_model(self, controller): data = self.get_data() - self.controller.set_gui_dict(data) + controller.set_gui_dict(data) - def data_to_model(self, key, value): - self.controller.set_gui_data(key, value) + def data_to_model(self, controller, key, value): + controller.set_gui_data(key, value) - def data_from_model(self): - data = self.controller.get_all_gui_data() + def data_from_model(self, controller): + data = controller.get_all_gui_data() if 'pdm_kategorie_neu' in data: self.pdm_category.set(data["pdm_kategorie_neu"]) if 'neuaufbau' in data: @@ -254,9 +260,6 @@ class RightFramePDM(): # TODO falls nötig pass - def set_controller(self, controller): - self.controller = controller - class App(): @@ -292,15 +295,13 @@ class App(): # TODO usw. def data_from_model(self): - self.tv.set_controller(self.controller) - self.rf0.set_controller(self.controller) - self.rf1.set_controller(self.controller) - self.tv.data_from_model() - self.rf0.data_from_model() - self.rf1.data_from_model() + self.tv.data_from_model(self.controller) + self.rf0.data_from_model(self.controller) + self.rf1.data_from_model(self.controller) def set_controller(self, controller): self.controller = controller + self.tv.set_controller(controller) def mainloop(self): self.root.mainloop() diff --git a/lib/caditem.py b/lib/caditem.py index 378a183..3e517e2 100644 --- a/lib/caditem.py +++ b/lib/caditem.py @@ -55,6 +55,10 @@ class CadItem(): self.parent_children_mapping = {} self.data = {} self.gui_data = {} + self.controller = None + + def set_controller(self, controller): + self.controller = controller def set_asm_id(self, asm_id): self.asm_id = asm_id @@ -62,10 +66,7 @@ class CadItem(): return self.asm_id def get_current_part_id(self): - return self.prt_id - def set_part_id(self, prt_id): - self.prt_id = prt_id - self.gui_data["teilenummer"] = prt_id + return self.get_gui_data("teilenummer") def set_parent_children(self, parent_children_mapping): diff --git a/lib/controller.py b/lib/controller.py index 1ac0d18..82d61fb 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -13,25 +13,6 @@ class Observer(): append it into the list""" if event_name not in self._observables: self._observables[event_name] = callback - - def detach(self, observer): - """Remove the observer from the observer list""" - try: - self._observers.remove(observer) - except ValueError: - pass - - def attach(self, observer): - """If the observer is not in the list, - append it into the list""" - if observer not in self._observers: - self._observers.append(observer) - - def notify(self, modifier = None): - """Alert the observers""" - for observer in self._observers: - if modifier != observer: - observer.update(self) class Event(): def __init__(self, name, data, autofire = True): @@ -48,17 +29,17 @@ class Controller(Observer): """ Class for manipulating the model and returning data for the view """ - def __init__(self): - self.model = None - self.view = None # currently just one gui/view - Observer.__init__(self) + def __init__(self, model, view): + self.set_model(model) + self.set_view(view) + #Observer.__init__(self) def set_model(self, model): self.model = model def set_view(self, view): self.view = view - def data_to_gui(self): + def refresh_gui(self): self.view.data_from_model() def data_from_model(self): self.view.data_from_model() @@ -100,7 +81,6 @@ class Controller(Observer): def set_gui_data(self, key, value): """merken der Eingaben des Nutzers der GUI """ self.model.set_gui_data(key, value) - self.notify() def get_gui_data(self, key): return self.model.get_gui_data(key) diff --git a/lib/test_gui.py b/lib/test_gui.py index 78bfea8..77df455 100644 --- a/lib/test_gui.py +++ b/lib/test_gui.py @@ -69,8 +69,8 @@ parent_children_mapping = {'400102196': ['400102125', '400102126', '400102130', model = CadItem("400102196") -model.set_part_id("400102142") gui_data = { + "teilenummer":"400102142", "pdm_kategorie_neu":"Einzelteil", "neuaufbau" :"False", "lebenszyklus_status_neu" :"Serie", @@ -81,12 +81,14 @@ model.set_gui_dict(gui_data) model.set_parent_children(parent_children_mapping) model.set_red_ids(red_ids) -controller = Controller() root = tk.Tk() app = App(root) -app.set_controller(controller) -controller.set_view(app) -controller.set_model(model) -controller.data_to_gui() +controller = Controller(model, app) +# um ohne Observer pattern auch Rückmeldungen geben zu können +app.set_controller(controller) +model.set_controller(controller) + +# Daten des Modells in der Oberfläche darstellen +controller.refresh_gui() app.mainloop()