assembly id hinzugefügt. Linke Frame wereitert. to_json und from_json implementiert. load and save implementiert

This commit is contained in:
2024-01-16 16:44:27 +01:00
parent 93829f4b12
commit 5aea1a0377
4 changed files with 215 additions and 139 deletions
+85 -46
View File
@@ -8,19 +8,21 @@ from caditem import CadItem
#logger = logging.getLogger(__name__) #logger = logging.getLogger(__name__)
class TreeView(): class TreeView():
def __init__(self, frame): def __init__(self, frame, nrow=0):
# 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)
# TODO hier anstatt root die Statistik rein schreiben. # TODO hier anstatt root die Statistik rein schreiben.
self.tree.heading('#0', text='root', anchor=tk.W) self.tree.heading('#0', text='root', anchor=tk.W)
self.tree.grid(row=nrow, column=0, sticky=tk.NSEW)
# add a scrollbar # add a scrollbar
scrollbar = ttk.Scrollbar(frame, orient=tk.VERTICAL, command=self.tree.yview) scrollbar = ttk.Scrollbar(frame, orient=tk.VERTICAL, command=self.tree.yview)
self.tree.configure(yscroll=scrollbar.set) self.tree.configure(yscroll=scrollbar.set)
scrollbar.grid(row=0, column=1, sticky='ns') scrollbar.grid(row=nrow, column=1, sticky='ns')
self.tree.bind('<<TreeviewSelect>>', self.item_selected) #self.tree.bind('<<TreeviewSelect>>', self.item_selected) # Einfachklick
self.tree.bind('<Double-Button-1>', self.item_selected) # Doppelklick:
def set_controller(self, controller): def set_controller(self, controller):
self.controller = controller self.controller = controller
@@ -61,9 +63,9 @@ 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, controller): def data_from_model(self):
parent_children_mapping = controller.get_parent_children() parent_children_mapping = self.controller.get_parent_children()
red_ids = controller.get_red_ids() red_ids = self.controller.get_red_ids()
self.refresh(parent_children_mapping, red_ids) self.refresh(parent_children_mapping, red_ids)
def item_selected(self, event): def item_selected(self, event):
@@ -74,14 +76,13 @@ class TreeView():
self.controller.set_gui_data('teilenummer', cid) self.controller.set_gui_data('teilenummer', cid)
self.controller.refresh_gui() self.controller.refresh_gui()
def get_handle(self):
return self.tree
class AllRightFrames(): class AllFrames():
""" enthält alle gleichen Methoden für die Widgets in der rechte Spalte """ enthält alle gleichen Methoden für die Widgets in der rechte Spalte
""" """
def __init__(self, nrow=0): def __init__(self, nrow=0):
self.set_start_rwo(nrow) self.set_start_rwo(nrow)
self._controller = None
def get_rows(self): def get_rows(self):
return self.rownum return self.rownum
@@ -91,6 +92,11 @@ class AllRightFrames():
raise Exception("this row can not be set") raise Exception("this row can not be set")
self.rownum = nrow self.rownum = nrow
def set_controller(self, controller):
self._controller = controller
def get_controller(self):
return self._controller
def data_to_model(self, controller): def data_to_model(self, controller):
data = self.get_data() data = self.get_data()
controller.set_gui_dict(data) controller.set_gui_dict(data)
@@ -98,9 +104,38 @@ class AllRightFrames():
def data_to_model(self, controller, key, value): def data_to_model(self, controller, key, value):
controller.set_gui_data(key, value) controller.set_gui_data(key, value)
class RightFrameLabels(AllRightFrames): class LeftFrameAsm(AllFrames):
def __init__(self, frame, nrow=0): def __init__(self, frame, nrow=0):
AllRightFrames.__init__(self, nrow) AllFrames.__init__(self, nrow)
self.frame = frame
self.build_widgets()
def build_widgets(self):
frame = self.frame
self.rownum = AllFrames.get_rows(self)
col_left = 0
# Baugruppennummer
asm_label = ttk.Label(frame, text="Baugruppennummer:" )
asm_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=5, pady=5)
self.rownum += 1
self.asm_number = tk.StringVar()
asm_entry = ttk.Entry(frame, textvariable=self.asm_number, width=9)
asm_entry.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=5, pady=5)
self.rownum += 1
def get_data(self):
return {
"asm_id": self.asm_number.get(),
}
def data_from_model(self):
data = self.get_controller().get_all_gui_data()
if 'asm_id' in data:
self.asm_number.set(data["asm_id"])
class RightFrameLabels(AllFrames):
def __init__(self, frame, nrow=0):
AllFrames.__init__(self, nrow)
self.frame = frame self.frame = frame
self.build_widgets() self.build_widgets()
@@ -131,6 +166,7 @@ class RightFrameLabels(AllRightFrames):
self.teilenummer_text = tk.StringVar() self.teilenummer_text = tk.StringVar()
teilenummer_entry = ttk.Entry(frame, textvariable=self.teilenummer_text) teilenummer_entry = ttk.Entry(frame, textvariable=self.teilenummer_text)
teilenummer_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=5, pady=5) teilenummer_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=5, pady=5)
teilenummer_entry.bind('<<ComboboxSelected>>', self.combo_callback)
self.rownum += 1 self.rownum += 1
separator2 = ttk.Separator(frame, orient='horizontal') separator2 = ttk.Separator(frame, orient='horizontal')
separator2.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=5, pady=5) separator2.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=5, pady=5)
@@ -142,14 +178,20 @@ class RightFrameLabels(AllRightFrames):
"teilennummer": self.teilenummer_text.get(), "teilennummer": self.teilenummer_text.get(),
} }
def data_from_model(self, controller): def data_from_model(self):
data = controller.get_all_gui_data() data = self.get_controller().get_all_gui_data()
if 'teilenummer' in data: if 'teilenummer' in data:
self.teilenummer_text.set(data["teilenummer"]) self.teilenummer_text.set(data["teilenummer"])
class RightFramePDM(AllRightFrames): def combo_callback(self, event):
""" handle the changed event of TK"""
# TODO falls nötig
a = 6
pass
class RightFramePDM(AllFrames):
def __init__(self, frame, nrow=0): def __init__(self, frame, nrow=0):
AllRightFrames.__init__(self, nrow) AllFrames.__init__(self, nrow)
self.frame = frame self.frame = frame
self.build_widgets() self.build_widgets()
@@ -164,7 +206,7 @@ class RightFramePDM(AllRightFrames):
pdmkategorie_combo = ttk.Combobox(frame, textvariable=self.pdm_category) pdmkategorie_combo = ttk.Combobox(frame, textvariable=self.pdm_category)
pdmkategorie_combo['values'] = ["Baugruppe", "Einzelteil", "Kaufteil", "NichtSivas", "Normteil", "Schweissbaugruppe"] pdmkategorie_combo['values'] = ["Baugruppe", "Einzelteil", "Kaufteil", "NichtSivas", "Normteil", "Schweissbaugruppe"]
pdmkategorie_combo['state'] = 'readonly' pdmkategorie_combo['state'] = 'readonly'
pdmkategorie_combo.bind('<<ComboboxSelected>>', self.combo_callbacks) # falls nötig pdmkategorie_combo.bind('<<ComboboxSelected>>', self.combo_callback) # falls nötig
pdmkategorie_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5) pdmkategorie_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5)
self.rownum += 1 self.rownum += 1
@@ -176,9 +218,9 @@ class RightFramePDM(AllRightFrames):
neuaufbau_checkbutton = ttk.Checkbutton(frame, neuaufbau_checkbutton = ttk.Checkbutton(frame,
text='ja', text='ja',
variable=self.neuaufbau, variable=self.neuaufbau,
onvalue="True", command=self.checkbox_callback,
offvalue="False") onvalue=True,
#command=self.checkbox_callback, offvalue=False)
neuaufbau_checkbutton.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5) neuaufbau_checkbutton.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5)
self.rownum += 1 self.rownum += 1
@@ -189,7 +231,7 @@ class RightFramePDM(AllRightFrames):
lebenszyklusstatus_combo = ttk.Combobox(frame, textvariable=self.lebenszyklus_status_neu) lebenszyklusstatus_combo = ttk.Combobox(frame, textvariable=self.lebenszyklus_status_neu)
lebenszyklusstatus_combo['values'] = ["Serie", "Prototyp"] lebenszyklusstatus_combo['values'] = ["Serie", "Prototyp"]
lebenszyklusstatus_combo['state'] = 'readonly' lebenszyklusstatus_combo['state'] = 'readonly'
lebenszyklusstatus_combo.bind('<<ComboboxSelected>>', self.combo_callbacks) lebenszyklusstatus_combo.bind('<<ComboboxSelected>>', self.combo_callback)
lebenszyklusstatus_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5) lebenszyklusstatus_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5)
self.rownum += 1 self.rownum += 1
@@ -200,9 +242,9 @@ class RightFramePDM(AllRightFrames):
aushalbzeug_checkbuttonr = ttk.Checkbutton(frame, aushalbzeug_checkbuttonr = ttk.Checkbutton(frame,
text='neu', text='neu',
variable=self.aus_halbzeug_neu, variable=self.aus_halbzeug_neu,
onvalue="True", command=self.checkbox_callback,
offvalue="False") onvalue=True,
#command=self.checkbox_callback, offvalue=False)
aushalbzeug_checkbuttonr.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5) aushalbzeug_checkbuttonr.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=5, pady=5)
self.rownum += 1 self.rownum += 1
@@ -223,8 +265,8 @@ class RightFramePDM(AllRightFrames):
"zusatzinfos_txt_neu": self.zusatzinfos_text.get(), "zusatzinfos_txt_neu": self.zusatzinfos_text.get(),
} }
def data_from_model(self, controller): def data_from_model(self):
data = controller.get_all_gui_data() data = self.get_controller().get_all_gui_data()
if 'pdm_kategorie_neu' in data: if 'pdm_kategorie_neu' in data:
self.pdm_category.set(data["pdm_kategorie_neu"]) self.pdm_category.set(data["pdm_kategorie_neu"])
if 'neuaufbau' in data: if 'neuaufbau' in data:
@@ -236,15 +278,10 @@ class RightFramePDM(AllRightFrames):
if 'zusatzinfos_text_neu' in data: if 'zusatzinfos_text_neu' in data:
self.zusatzinfos_text.set(data["zusatzinfos_text_neu"]) self.zusatzinfos_text.set(data["zusatzinfos_text_neu"])
def combo_callbacks(self, event): def combo_callback(self, event):
""" handle the changed event of TK"""
# TODO falls nötig
a = 6
pass pass
def checkbox_callback(self, event): def checkbox_callback(self):
""" handle the changed event of TK"""
a = 6
pass pass
@@ -271,9 +308,9 @@ class App():
style = ttk.Style(self.root) style = ttk.Style(self.root)
style.theme_use('classic') style.theme_use('classic')
self.tv = TreeView(left_frame) self.lf1 = LeftFrameAsm(left_frame, 0)
gridhdl = self.tv.get_handle() nrows = self.lf1.get_rows()
gridhdl.grid(row=0, column=0, sticky=tk.NSEW) self.tv = TreeView(left_frame, nrows)
self.rf0 = RightFrameLabels(right_frame, 0) self.rf0 = RightFrameLabels(right_frame, 0)
nrows = self.rf0.get_rows() nrows = self.rf0.get_rows()
@@ -285,15 +322,17 @@ class App():
def data_from_model(self): 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.tv.data_from_model(self.controller) self.tv.data_from_model()
self.rf0.data_from_model(self.controller) self.rf0.data_from_model()
self.rf1.data_from_model(self.controller) self.rf1.data_from_model()
def set_controller(self, controller): def set_controller(self, controller):
# merken des Handels auf den Controller # merken des Handels auf den Controller in jedem widget
self.controller = controller self._controller = controller
# der Tree braucht aufgrund des Callbacks der Selektion auch einen Verweis
self.tv.set_controller(controller) self.tv.set_controller(controller)
self.rf0.set_controller(controller)
self.rf1.set_controller(controller)
def mainloop(self): def mainloop(self):
self.root.mainloop() self.root.mainloop()
@@ -309,9 +348,9 @@ if __name__ == "__main__":
data model objects. The CONTROLLER receives the input, optionally validates data model objects. The CONTROLLER receives the input, optionally validates
it and then passes the input to the model. it and then passes the input to the model.
MODEL <CONTROLLER>
<-updates- ^--manipulates-- <--fills gui -- --manipulates-->
VIEW CONTROLLER --user input-> <--give model data--
--sees --> -- uses --> <VIEW> <MODEL>
USER
""" """
+68 -14
View File
@@ -1,10 +1,6 @@
import json import json
from controller import Controller from controller import Controller
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
@@ -34,7 +30,8 @@ class CadItem():
"TOS_Trolley_Projekte", "TOS_Trolley_Omniflo", "TOS_Trolley_Projekte", "TOS_Trolley_Omniflo",
"TOS_Trolley_Spinnerei", "TOS_Trolley_ILS", "Änderungsbeschreibung", "TOS_Trolley_Spinnerei", "TOS_Trolley_ILS", "Änderungsbeschreibung",
"Freigabevermerk", "ZusaetzlicheInformationen"] "Freigabevermerk", "ZusaetzlicheInformationen"]
gui_data_keys = [ "teilenummer", gui_data_keys = [ "asm_id",
"teilenummer",
"pdm_kategorie_neu", "pdm_kategorie_neu",
"neuaufbau", "neuaufbau",
"lebenszyklus_status_neu", "lebenszyklus_status_neu",
@@ -48,22 +45,22 @@ class CadItem():
# TODO siehe Layout Entwurf svg # TODO siehe Layout Entwurf svg
] ]
def __init__(self, asm_id): def __init__(self):
""" is initalized with its unique id""" """ is initalized with its unique id"""
self.set_asm_id(asm_id)
self.red_ids = {} self.red_ids = {}
self.parent_children_mapping = {} self.parent_children_mapping = {}
self.data = {} self.data = {}
self.gui_data = {} self.gui_data = {}
self.read_only_items = {}
self.controller = None self.controller = None
def set_controller(self, controller): def set_controller(self, controller):
self.controller = controller self.controller = controller
def set_asm_id(self, asm_id): def set_asm_id(self, asm_id):
self.asm_id = asm_id self.set_gui_data("asm_id", asm_id)
def get_current_asm_id(self): def get_asm_id(self):
return self.asm_id return self.get_gui_data("asm_id")
def get_current_part_id(self): def get_current_part_id(self):
return self.get_gui_data("teilenummer") return self.get_gui_data("teilenummer")
@@ -84,6 +81,20 @@ class CadItem():
def get_red_ids(self): def get_red_ids(self):
return self.red_ids return self.red_ids
# Methoden um die Verwendbarkeit einzelner Schalter auszugrauen
def set_read_only_dict(self, data:dict):
for k,v in data:
self.set_read_only(k,v)
def set_read_only(self, key, val):
if key not in self.gui_data:
raise Exception("this data can not be set")
else:
self.read_only_items[key] = val
def get_read_only(self, key):
return self.read_only_items[key]
def get_all_read_only_data(self):
return self.read_only_items
# Daten zum Impfen merken # Daten zum Impfen merken
def set_data_dict(self, data:dict): def set_data_dict(self, data:dict):
for k,v in data: for k,v in data:
@@ -101,7 +112,7 @@ class CadItem():
""" gibt alle enthaltenen Daten zurück """ """ gibt alle enthaltenen Daten zurück """
return self.data return self.data
# Daten in der GUI # Daten die in der GUI gespeichert werden sollen
def set_gui_dict(self, data:dict): def set_gui_dict(self, data:dict):
""" setzt die Daten der GUI """ """ setzt die Daten der GUI """
for k,v in data.items(): for k,v in data.items():
@@ -118,14 +129,58 @@ class CadItem():
def get_all_gui_data(self): def get_all_gui_data(self):
return self.gui_data return self.gui_data
def load(): def from_json(self, json_str):
jsonobj = json.loads(json_str)
if "gui_data" in jsonobj:
gui_data = jsonobj["gui_data"]
self.set_gui_dict(gui_data)
else:
raise Exception("no gui_data given in string")
if "data" in jsonobj:
data = jsonobj["data"]
self.set_data_dict(data)
else:
raise Exception("no data given in string")
if "parent_children_mapping" in jsonobj:
parent_children_mapping = jsonobj["parent_children_mapping"]
self.set_parent_children(parent_children_mapping)
else:
raise Exception("no parent_children_mapping given in string")
if "red_ids" in jsonobj:
red_ids = jsonobj["red_ids"]
self.set_red_ids(red_ids)
def to_json(self):
jsonobj = dict()
# die Oberflächendaten
gui_data = self.get_gui_dict()
jsonobj["gui_data"] = gui_data
# die Impfdaten
data = self.get_all_data()
jsonobj["data"] = data
# der Baum
parent_children_mapping = self.get_parent_children()
jsonobj["parent_children_mapping"] = parent_children_mapping
# die ids der nicht migrierten Dateien
red_ids = self.get_red_ids()
jsonobj["red_ids"] = red_ids
return json.dumps(jsonobj)
def load(self, path):
#try: #try:
# with open('data.json', 'r') as f: # with open('data.json', 'r') as f:
# self.model.todos = json.load(f) # self.model.todos = json.load(f)
#except Exception: #except Exception:
# pass # pass
pass pass
def save(): def save(self, path):
#with open('data.json', 'w') as f: #with open('data.json', 'w') as f:
# data = json.dump(self.model.data, f) # data = json.dump(self.model.data, f)
pass pass
@@ -153,7 +208,6 @@ class CadItemRepository:
def update(self, old_item, new_item): def update(self, old_item, new_item):
self.delete(old_item.id) self.delete(old_item.id)
self.add(new_item) self.add(new_item)
raise Exception("CadItem not found")
def delete(self, id): def delete(self, id):
for p in self.caditems: for p in self.caditems:
-1
View File
@@ -9,7 +9,6 @@ class Controller():
def __init__(self, model, view): def __init__(self, model, view):
self.set_model(model) self.set_model(model)
self.set_view(view) self.set_view(view)
#Observer.__init__(self)
def set_model(self, model): def set_model(self, model):
self.model = model self.model = model
+62 -78
View File
@@ -3,84 +3,68 @@ from caditem import CadItem
from CreoMigrateGui import App from CreoMigrateGui import App
from controller import Controller from controller import Controller
json_str = """
red_ids = ( '400102274', '400102275', '400102190', '400102198', {
'400102161', '400102277', '400102163', '400102278', "parent_children_mapping": {
'400102282', '400102284', '400102195', 'MA0000008', "400102130": [ "400102142" ],
'MA0000004', '929055170', '400102267', '400102235', "400102167": [ "821116004" ],
'400102236', 'MA0000006', '400102237', '400102238', "400102168": [ "821116001" ],
'400102239', '400102268', '829416159', '924031058', "400102195": [ "822066075", "822066216", "822066154", "822066101",
'924031081', '822064091', '822066199', '822066200') "822064090", "822066196", "400102129", "822066217", "822066160",
"822066215", "913041045", "913011009", "911011057", "822064035",
parent_children_mapping = {'400102196': ['400102125', '400102126', '400102130', "925011006", "911091041", "913051040", "911021112", "911021166",
'400102161', '400102163', '400102165', "825006003", "912041005", "911011014", "911011009", "911021144",
'400102166', '400102167', '400102168', "911021001", "913011016", "929055170", "913011010", "911021035",
'400102190', '400102195', '400102198', "829416065", "712000151", "712000100" ],
'400102246', '400102247', '400102267', "400102196": [ "400102125", "400102126", "400102130", "400102161",
'400102272', '400102274', '400102275', "400102163", "400102165", "400102166", "400102167", "400102168",
'400102277', '400102278', '400102282', "400102190", "400102195", "400102198", "400102246", "400102247",
'400102284', '400102417', '720002003', "400102267", "400102272", "400102274", "400102275", "400102277",
'721001034', '821114025', '822064091', "400102278", "400102282", "400102284", "400102417", "720002003",
'822066085', '822996075', '829416061', "721001034", "821114025", "822064091", "822066085", "822996075",
'829516004', '911021113', '911021181', "829416061", "829516004", "911021113", "911021181", "911021259",
'911021259', '911091054', '911091096', "911091054", "911091096", "911091097", "911251013", "912011009",
'911091097', '911251013', '912011009', "919050006", "924031058", "924031081" ],
'919050006', '924031058', "400102235": [ "400102236", "400102237", "400102238", "400102239",
'924031081'], "400102268", "911021143", "911021054", "911021055" ],
'400102282': ['822066026', '822066089', '919010052'], "400102236": [ "MA0000006" ],
'400102195': ['822066075', '822066216', "400102267": [ "400102235", "829416159", "829416077", "829416079",
'822066154', '822066101', '822064090', "911021260", "911021147", "911251014" ],
'822066196', '400102129', '822066217', "400102282": [ "822066026", "822066089", "919010052" ],
'822066160', '822066215', '913041045', "821114025": [ "911081007", "821116053" ],
'913011009', '911011057', '822064035', "821116004": [ "822026004" ],
'925011006', '911091041', '913051040', "822064035": [ "822066065" ],
'911021112', '911021166', '825006003', "822064091": [ "822066212", "822064093", "822066220", "822066200",
'912041005', '911011014', '911011009', "912011010", "911021156", "822066201", "911071027", "913011109",
'911021144', '911021001', '913011016', "911011070", "913011001", "710005021", "919010055", "720000008", "720000007" ],
'929055170', '913011010', '911021035', "822064093": [ "822066204", "822066205", "822066206", "822066207", "822066208" ],
'829416065', '712000151', "822066075": [ "822066157", "822066162", "911261023" ],
'712000100'], "822066160": [ "MA0000004" ],
'822066075': ['822066157', '822066162', '911261023'], "822066162": [ "822064013" ],
'822066162': ['822064013'], "822066196": [ "MA0000008" ],
'822066196': ['MA0000008'], "822066220": [ "924031033" ],
'822066160': ['MA0000004'], "829416159": [ "829416089" ]
'822064035': ['822066065'], },
'822064093': ['822066204', '822066205', '822066206', '822066207', '822066208'], "red_ids": [ "400102274", "400102275", "400102190", "400102198", "400102161",
'822066220': ['924031033'], "400102277", "400102163", "400102278", "400102282", "400102284",
'822064091': ['822066212', '822064093', '822066220', "400102195", "MA0000008", "MA0000004", "929055170", "400102267",
'822066200', '912011010', '911021156', "400102235", "400102236", "MA0000006", "400102237", "400102238",
'822066201', '911071027', '913011109', "400102239", "400102268", "829416159", "924031058", "924031081",
'911011070', '913011001', '710005021', "822064091", "822066199", "822066200" ],
'919010055', '720000008', '720000007'], "gui_data": {
'400102267': ['400102235', '829416159', '829416077', "asm_id": "400102196",
'829416079', '911021260', '911021147', "teilenummer": "400102142",
'911251014'], "pdm_kategorie_neu": "Einzelteil",
'400102235': ['400102236', '400102237', '400102238', "neuaufbau": "False",
'400102239', '400102268', '911021143', "lebenszyklus_status_neu": "Serie",
'911021054', '911021055'], "aus_halbzeug_neu": "True",
'400102236': ['MA0000006'], "zusatzinfos_text_neu": "Dies sind neue Zusatzinfos"
'829416159': ['829416089'], },
'400102130': ['400102142'], "data": {}
'821116004': ['822026004'], }
'400102168': ['821116001'], """
'821114025': ['911081007', '821116053'], model = CadItem()
'400102167': ['821116004']} model.from_json(json_str)
model = CadItem("400102196")
gui_data = {
"teilenummer":"400102142",
"pdm_kategorie_neu":"Einzelteil",
"neuaufbau" :"False",
"lebenszyklus_status_neu" :"Serie",
"aus_halbzeug_neu" :"True",
"zusatzinfos_text_neu": 'Dies sind neue Zusatzinfos',
}
model.set_gui_dict(gui_data)
model.set_parent_children(parent_children_mapping)
model.set_red_ids(red_ids)
root = tk.Tk() root = tk.Tk()
app = App(root) app = App(root)