zwischenstand eingepflegt. Controller Funktionen soll in Zukunft über Events aufgerufen werden)

This commit is contained in:
2024-01-15 15:04:24 +01:00
parent d4ecb88b33
commit 9c7325440f
4 changed files with 118 additions and 39 deletions
+47 -30
View File
@@ -7,11 +7,9 @@ from caditem import CadItem
#logger = logging.getLogger(__name__) #logger = logging.getLogger(__name__)
class TreeView(): class TreeView():
def __init__(self, frame, controller): def __init__(self, frame):
self.controller = controller self.controller = None
# a treeview # a treeview
# hier Anzahl der sichtbaren Zeilen des Baums angeben: # hier Anzahl der sichtbaren Zeilen des Baums angeben:
self.tree = ttk.Treeview(frame, height=40) self.tree = ttk.Treeview(frame, height=40)
@@ -25,8 +23,16 @@ class TreeView():
self.tree.bind('<<TreeviewSelect>>', self.item_selected) self.tree.bind('<<TreeviewSelect>>', self.item_selected)
def set_controller(self, controller):
self.controller = controller
def refresh(self, parent_children_mapping, red_ids):
self.clear()
self.create(parent_children_mapping, red_ids)
def clear(self): def clear(self):
self.tree.delete() for c in self.tree.get_children():
self.tree.delete(c)
def create(self, parent_children_mapping, red_ids): def create(self, parent_children_mapping, red_ids):
# adding data of first column after root # adding data of first column after root
@@ -56,13 +62,18 @@ class TreeView():
self.tree.tag_configure('good', background='white') self.tree.tag_configure('good', background='white')
self.tree.tag_configure('missing', background='red') 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 item_selected(self, event): def item_selected(self, event):
"""callback if an item in the tree has been selected """callback of TK if an item in the tree has been selected
""" """
cid = self.tree.selection()[0] cid = self.tree.selection()[0]
# trage es # trage die neue ID ins Modell ein
self.controller.set_gui_data('teilenummer', cid) self.controller.set_gui_data('teilenummer', cid)
self.controller.update_view()
# for selected_item in self.tree.selection(): # for selected_item in self.tree.selection():
# item = self.tree.item(selected_item) # item = self.tree.item(selected_item)
# record = item['values'] # record = item['values']
@@ -71,14 +82,17 @@ class TreeView():
def get_handle(self): def get_handle(self):
return self.tree return self.tree
class RightFrameLabels(): class RightFrameLabels():
def __init__(self, frame, controller, nrow=0): def __init__(self, frame, nrow=0):
self.controller = controller self.controller = None
self.frame = frame self.frame = frame
self.build_gui() self.build_gui()
self.data_from_model()
self.set_start_rwo(nrow) self.set_start_rwo(nrow)
def set_controller(self, controller):
self.controller = controller
def get_rows(self): def get_rows(self):
return self.rownum return self.rownum
def set_start_rwo(self, nrow): def set_start_rwo(self, nrow):
@@ -134,11 +148,10 @@ class RightFrameLabels():
self.teilenummer_text.set(data["teilenummer"]) self.teilenummer_text.set(data["teilenummer"])
class RightFramePDM(): class RightFramePDM():
def __init__(self, frame, controller, nrow=0): def __init__(self, frame, nrow=0):
self.controller = controller self.controller = None
self.frame = frame self.frame = frame
self.build_gui() self.build_gui()
self.data_from_model()
self.set_start_rwo(nrow) self.set_start_rwo(nrow)
def get_rows(self): def get_rows(self):
@@ -232,22 +245,24 @@ class RightFramePDM():
if 'lebenszyklus_status_neu' in data: if 'lebenszyklus_status_neu' in data:
self.lebenszyklus_status_neu.set(data["lebenszyklus_status_neu"]) self.lebenszyklus_status_neu.set(data["lebenszyklus_status_neu"])
if 'aus_halbzeug_neu' in data: if 'aus_halbzeug_neu' in data:
self.zusatzinfos_text.set(data["aus_halbzeug_neu"]) self.aus_halbzeug_neu= data["aus_halbzeug_neu"]
if 'zusatzinfos_text_neu' in data: if 'zusatzinfos_text_neu' in data:
self.aus_halbzeug_neu = data["zusatzinfos_text_neu"] self.zusatzinfos_text.set(data["zusatzinfos_text_neu"])
def combo_callbacks(self, event): def combo_callbacks(self, event):
""" handle the changed event """ """ handle the changed event of TK"""
# TODO falls nötig # TODO falls nötig
pass pass
def set_controller(self, controller):
self.controller = controller
class App(): class App():
def __init__(self, root, controller): def __init__(self, root):
self.root = root self.root = root
self.controller = controller
# configure the grid # configure the grid
# die erste Spalte mit Baum sollte unbeweglich bleiben bei Vergräßerung des Fensters. # die erste Spalte mit Baum sollte unbeweglich bleiben bei Vergräßerung des Fensters.
@@ -265,25 +280,27 @@ class App():
style = ttk.Style(self.root) style = ttk.Style(self.root)
style.theme_use('classic') style.theme_use('classic')
current_id = self.controller.get_current_asm_id() self.tv = TreeView(left_frame)
parent_children_mapping = self.controller.get_parent_children()
red_ids = self.controller.get_red_ids()
self.tv = TreeView(left_frame, controller)
self.tv.create(parent_children_mapping, red_ids)
gridhdl = self.tv.get_handle() gridhdl = self.tv.get_handle()
gridhdl.grid(row=0, column=0, sticky=tk.NSEW) gridhdl.grid(row=0, column=0, sticky=tk.NSEW)
self.rf0 = RightFrameLabels(right_frame, controller, 0) self.rf0 = RightFrameLabels(right_frame, 0)
nrows = self.rf0.get_rows() nrows = self.rf0.get_rows()
self.rf1 = RightFramePDM(right_frame, controller, nrows) self.rf1 = RightFramePDM(right_frame, nrows)
nrows = self.rf1.get_rows() nrows = self.rf1.get_rows()
#self.rf2 = RightFramePDM(right_frame, controller, nrows) #self.rf2 = RightFramePDM(right_frame, nrows)
# TODO usw. # TODO usw.
def update_view(self): def data_from_model(self):
self.rf0.update_view() self.tv.set_controller(self.controller)
self.rf1.update_view() 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()
def set_controller(self, controller):
self.controller = controller
def mainloop(self): def mainloop(self):
self.root.mainloop() self.root.mainloop()
+7 -1
View File
@@ -1,4 +1,10 @@
import json import json
from controller import Controller, Event
class CadItem(): class CadItem():
""" """
This item contains all data for writing all necessary data to the solid edg cad file This item contains all data for writing all necessary data to the solid edg cad file
@@ -33,7 +39,7 @@ class CadItem():
"neuaufbau", "neuaufbau",
"lebenszyklus_status_neu", "lebenszyklus_status_neu",
"aus_halbzeug_neu", "aus_halbzeug_neu",
"zusatzinfos_txt_neu", "zusatzinfos_text_neu",
"bezeichnung_sivas", "bezeichnung_neu", "bezeichnung_sivas", "bezeichnung_neu",
"beschaffungsart_sivas","beschaffungsart_neu" "beschaffungsart_sivas","beschaffungsart_neu"
"mengeneinheit_sivas","mengeneinheit_neu" "mengeneinheit_sivas","mengeneinheit_neu"
+57 -5
View File
@@ -2,15 +2,66 @@
Contains the logic for the MVC of CreoMigrate Gui Contains the logic for the MVC of CreoMigrate Gui
""" """
class Controller(): class Observer():
_observers = []
def __init__(self):
self._observers.append(self)
self._observables = {}
def observe(self, event_name, callback):
"""If the observer is not in the list,
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):
self.name = name
self.data = data
if autofire:
self.fire()
def fire(self):
for observer in Observer._observers:
if self.name in observer._observables:
observer._observables[self.name](self.data)
class Controller(Observer):
""" """
Class for manipulating the model and returning data for the view Class for manipulating the model and returning data for the view
""" """
def __init__(self, model): def __init__(self):
self.model = model self.model = None
self.view = None # currently just one gui/view
Observer.__init__(self)
def update_view(self): def set_model(self, model):
pass self.model = model
def set_view(self, view):
self.view = view
def data_to_gui(self):
self.view.data_from_model()
def data_from_model(self):
self.view.data_from_model()
def get_current_asm_id(self): def get_current_asm_id(self):
self.model.get_current_asm_id() self.model.get_current_asm_id()
@@ -49,6 +100,7 @@ class Controller():
def set_gui_data(self, key, value): def set_gui_data(self, key, value):
"""merken der Eingaben des Nutzers der GUI """ """merken der Eingaben des Nutzers der GUI """
self.model.set_gui_data(key, value) self.model.set_gui_data(key, value)
self.notify()
def get_gui_data(self, key): def get_gui_data(self, key):
return self.model.get_gui_data(key) return self.model.get_gui_data(key)
+7 -3
View File
@@ -74,15 +74,19 @@ gui_data = {
"pdm_kategorie_neu":"Einzelteil", "pdm_kategorie_neu":"Einzelteil",
"neuaufbau" :"False", "neuaufbau" :"False",
"lebenszyklus_status_neu" :"Serie", "lebenszyklus_status_neu" :"Serie",
"neuaufbau" :"",
"aus_halbzeug_neu" :"True", "aus_halbzeug_neu" :"True",
"zusatzinfos_text_neu": 'Dies sind neue Zusatzinfos',
} }
model.set_gui_dict(gui_data) model.set_gui_dict(gui_data)
model.set_parent_children(parent_children_mapping) model.set_parent_children(parent_children_mapping)
model.set_red_ids(red_ids) model.set_red_ids(red_ids)
controller = Controller(model) controller = Controller()
root = tk.Tk() root = tk.Tk()
app = App(root, controller) app = App(root)
app.set_controller(controller)
controller.set_view(app)
controller.set_model(model)
controller.data_to_gui()
app.mainloop() app.mainloop()