import tkinter as tk from tkinter import ttk from tkinter import filedialog from controller import Controller from caditem import CadItem #import logging #logger = logging.getLogger(__name__) def OnMouseWheel(self,event): self.scrollbar1.yview("scroll",event.delta,"units") return "break" class AllFrames(): """ enthält alle gleichen Methoden für die Widgets in der rechte Spalte """ def __init__(self, nrow=0): 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_row(self, nrow): """setzt für diesen Frame die Anfangszeile""" if nrow < 0: raise Exception("this row can not be set") self.rownum = nrow def set_controller(self, controller): self._controller = controller def get_controller(self): 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 TreeView(): def __init__(self, frame, nrow=0): # a treeview # hier Anzahl der sichtbaren Zeilen des Baums angeben: self.tree = ttk.Treeview(frame, height=57) # TODO hier anstatt root die Statistik rein schreiben. self.tree.heading('#0', text='root', anchor=tk.W) self.tree.grid(row=nrow, column=0, sticky=tk.NSEW) # add a scrollbar scrollbar = ttk.Scrollbar(frame, orient='vertical', command=self.tree.yview) self.tree.configure(yscroll=scrollbar.set) scrollbar.grid(row=nrow, column=1, sticky='ns') #self.tree.bind('<>', self.item_selected) # Einfachklick self.tree.bind('', self.item_selected) # Doppelklick: 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): for c in self.tree.get_children(): self.tree.delete(c) def create(self, parent_children_mapping, red_ids): # adding data of first column after root pool = set() for parent,children in parent_children_mapping.items(): if parent not in pool: self.tree.insert('', tk.END, text=parent, iid=parent, open=True) pool.add(parent) cn = children # sortiere die Zahlen im Baum immer aufsteigend cn.sort(reverse=True) for child_id in cn: if child_id not in pool: pool.add(child_id) if child_id not in red_ids: rowtags = ('good') else: rowtags = ('missing') self.tree.insert('', tk.END, text=child_id, iid=child_id, tags=rowtags, open=True) #self.tree.move(child_id, parent, 0) # einmal über alles gehen und alle keys an die richtige Stelle schieben for parent,children in parent_children_mapping.items(): for child_id in children: self.tree.move(child_id, parent, 0) # https://www.askpython.com/python-modules/tkinter/tkinter-colors #self.tree.tag_configure('good', background='LawnGreen') 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.refresh(parent_children_mapping, red_ids) def item_selected(self, event): """callback of TK if an item in the tree has been selected """ cid = self.tree.selection()[0] # trage die neue ID ins Modell ein self.controller.set_gui_data('teilenummer', cid) self.controller.refresh_gui() class LeftFrameAsm(AllFrames): def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): 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=3, pady=3) 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=3, pady=3) 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, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 # Feld, SIVAS-Werte, Überschriebene Werte feld_label = ttk.Label(frame, text="Feld" ) feld_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) Sivas_label = ttk.Label(frame, text="SIVAS-Werte" ) Sivas_label.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) transwritten_label = ttk.Label(frame, text="Überschriebene Werte" ) transwritten_label.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) feld_label.configure(font=("Helvetica", 12)) Sivas_label.configure(font=("Helvetica",12)) transwritten_label.configure(font=("Helvetica",12)) self.rownum += 1 separator = ttk.Separator(frame, orient='horizontal') separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 # Teilenummer teilenummer_label = ttk.Label(frame, text="Teilenummer:") teilenummer_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.teilenummer_text = tk.StringVar() teilenummer_entry = ttk.Entry(frame, textvariable=self.teilenummer_text, width=9) teilenummer_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) teilenummer_entry.bind('<>', lambda event:self.callback("cb_teilenummer")) self.rownum += 1 separator2 = ttk.Separator(frame, orient='horizontal') separator2.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 def get_data(self): return { "teilenummer": self.teilenummer_text.get(), } def data_from_model(self): data = self.get_controller().get_all_gui_data() if 'teilenummer' in data: self.teilenummer_text.set(data["teilenummer"]) class RightFramePDM(AllFrames): def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 # Datenbank Schulung oder Produktiv datenbank_label = ttk.Label(frame, text="Datenbank:" ) datenbank_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.datenbank = tk.IntVar(value=1) datenbank_prod = ttk.Radiobutton(frame, text="Produktiv", variable=self.datenbank, value=1) datenbank_prod .grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 datenbank_schul = ttk.Radiobutton(frame, text="Schulung", variable=self.datenbank, value=2) datenbank_schul .grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # 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=3, pady=3) self.pdm_category = tk.StringVar() pdmkategorie_combo = ttk.Combobox(frame, textvariable=self.pdm_category) pdmkategorie_combo['values'] = categories pdmkategorie_combo['state'] = 'readonly' pdmkategorie_combo.bind('<>', lambda event:self.callback('cb_pdm_kategorie_neu')) pdmkategorie_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Neuaufbau neuaufbau_label = ttk.Label(frame, text="Neuaufbau:") neuaufbau_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.neuaufbau = None neuaufbau_checkbutton = ttk.Checkbutton(frame, #text='ja', variable=self.neuaufbau, command=lambda: self.callback("cb_neuaufbau"), onvalue=True, offvalue=False) neuaufbau_checkbutton.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # aus Halbzeug halbzeug_label = ttk.Label(frame, text="aus Halbzeug:") halbzeug_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.aus_halbzeug_neu = None aushalbzeug_checkbuttonr = ttk.Checkbutton(frame, #text='neu', variable=self.aus_halbzeug_neu, command=lambda: self.callback("cb_aus_halbzeug_neu"), onvalue=True, offvalue=False) aushalbzeug_checkbuttonr.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Halbzeugnummer halbzeugnummer_label = ttk.Label(frame, text="Halbzeugnummer:" ) halbzeugnummer_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeugnummer_neu = tk.StringVar() halbzeugnummer_neu_entry = ttk.Entry(frame, textvariable=self.halbzeugnummer_neu) halbzeugnummer_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Halbzeuglänge halbzeuglaenge_label = ttk.Label(frame, text="Halbzeuglänge:" ) halbzeuglaenge_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeuglaenge_neu = tk.StringVar() halbzeuglaenge_neu_entry = ttk.Entry(frame, textvariable=self.halbzeuglaenge_neu) halbzeuglaenge_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # HalbzeugOberfläche halbzeugoberflaeche_label = ttk.Label(frame, text="Halbzeugoberflaeche:" ) halbzeugoberflaeche_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeugoberflaeche_neu = tk.StringVar() halbzeugoberflaeche_neu_entry = ttk.Entry(frame, textvariable=self.halbzeugoberflaeche_neu) halbzeugoberflaeche_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) 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=3, pady=3) self.lebenszyklus_status_neu = tk.StringVar() lebenszyklusstatus_combo = ttk.Combobox(frame, textvariable=self.lebenszyklus_status_neu) lebenszyklusstatus_combo['values'] = lstatus lebenszyklusstatus_combo['state'] = 'readonly' lebenszyklusstatus_combo.bind('<>', lambda event:self.callback('cb_lebenszyklus_status_neu')) lebenszyklusstatus_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # 3D Model Filesearch model3d_label = ttk.Label(frame, text="3D-Modell:" ) model3d_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.model3d_neu = tk.StringVar() model3d_combo = ttk.Combobox(frame, textvariable=self.model3d_neu) model3d_combo['values'] = ['pfad1 Teilenummer in Dateinamen','pfad2 Teilenummer in Dateinamen'] model3d_combo['state'] = 'readonly' model3d_combo.bind('<>', lambda event:self.callback('cb_3Dmodel_neu')) model3d_combo.grid(column=col_left+1, columnspan=2, row=self.rownum, sticky=tk.W, padx=3, pady=3) #toplevel = tk.Toplevel() #toplevel.title("search Window") #filename = filedialog.askopenfilename( # parent=toplevel, # title="Browse File" #) self.rownum += 1 separator = ttk.Separator(frame, orient='horizontal') separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 def get_database_str(self): if self.datenbank.get() == 1: datenbank = "produktiv" else: datenbank = "schulung" def value_to_database_str(self, val): if val == 1: return "produktiv" else: return "schulung" def get_data(self): return { "datenbank": self.get_database_str(), "pdm_kategorie_neu": self.pdm_category.get(), "neuaufbau": self.neuaufbau, "aus_halbzeug_neu": self.aus_halbzeug_neu, "halbzeugnummer_neu": self.halbzeugnummer_neu.get(), "halbzeuglaenge_neu": self.halbzeuglaenge_neu.get(), "halbzeugoberflaeche_neu":self.halbzeugoberflaeche_neu.get(), "lebenszyklus_status_neu": self.lebenszyklus_status_neu.get(), } def data_from_model(self): data = self.get_controller().get_all_gui_data() if 'datenbank' in data: self.datenbank.set(self.value_to_database_str(data["datenbank"])) if 'pdm_kategorie_neu' in data: self.pdm_category.set(data["pdm_kategorie_neu"]) if 'neuaufbau' in data: self.neuaufbau = data["neuaufbau"] if 'halbzeugnummer_neu' in data: self.halbzeugnummer_neu.set(data["halbzeugnummer_neu"]) if 'halbzeuglaenge_neu' in data: self.halbzeuglaenge_neu.set(data["halbzeuglaenge_neu"]) if 'halbzeugoberflaeche_neu' in data: self.halbzeugoberflaeche_neu.set(data["halbzeugoberflaeche_neu"]) if 'lebenszyklus_status_neu' in data: self.lebenszyklus_status_neu.set(data["lebenszyklus_status_neu"]) if 'aus_halbzeug_neu' in data: self.aus_halbzeug_neu= data["aus_halbzeug_neu"] class RightFrameBezeichnung(AllFrames): def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 categories = configs.Allgemein.get_options("Kategorien") # Bezeichnung 1 bezeichnung1_label = ttk.Label(frame, text="Bezeichnung 1:" ) bezeichnung1_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.bezeichnung1_sivas = tk.StringVar() bezeichnung1_entry = ttk.Entry(frame, textvariable=self.bezeichnung1_sivas, state="readonly") bezeichnung1_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.bezeichnung1_neu = tk.StringVar() bezeichnung1_neu_entry = ttk.Entry(frame, textvariable=self.bezeichnung1_neu) bezeichnung1_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Bezeichnung 2 bezeichnung2_label = ttk.Label(frame, text="Bezeichnung 2:" ) bezeichnung2_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.bezeichnung2_sivas = tk.StringVar() bezeichnung2_entry = ttk.Entry(frame, textvariable=self.bezeichnung2_sivas) bezeichnung2_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 separator = ttk.Separator(frame, orient='horizontal') separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 def get_data(self): return { "bezeichnung1_sivas": self.bezeichnung1_sivas.get(), "bezeichnung1_neu": self.bezeichnung1_neu.get(), "bezeichnung2_sivas": self.bezeichnung2_sivas.get(), "bezeichnung2_neu": self.bezeichnung2_neu.get(), } def data_from_model(self): data = self.get_controller().get_all_gui_data() if 'bezeichnung1_sivas' in data: self.bezeichnung1_sivas.set(data["bezeichnung1_sivas"]) if 'bezeichnung1_neu' in data: self.bezeichnung1_neu.set(data["bezeichnung1_neu"]) if 'bezeichnung2_sivas' in data: self.bezeichnung2_sivas.set(data["bezeichnung2_sivas"]) if 'bezeichnung2_neu' in data: self.bezeichnung2_neu.set(data["bezeichnung2_neu"]) class RightFrameHalbzeugOhneS(AllFrames): def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 categories = configs.Allgemein.get_options("Kategorien") ruestcodes = configs.Allgemein.get_options("Ruestcode") # Halbzeug ohne Sägeliste halbzeugOhneSaege_label = ttk.Label(frame, text="Halbzeug ohne Sägeliste:" ) halbzeugOhneSaege_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeugOhneSaege_sivas = tk.StringVar() halbzeugOhneSaege_entry = ttk.Entry(frame, textvariable=self.halbzeugOhneSaege_sivas) halbzeugOhneSaege_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeugOhneSaege_neu = tk.StringVar() halbzeugOhneSaege_neu_combo = ttk.Combobox(frame, textvariable=self.halbzeugOhneSaege_neu) halbzeugOhneSaege_neu_combo['values'] = ['ja','nein'] halbzeugOhneSaege_neu_combo['state'] = 'readonly' halbzeugOhneSaege_neu_combo.bind('<>', lambda event:self.callback('cb_halbzeugOhneSaege_neu')) halbzeugOhneSaege_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Rüstcode ruestcode_label = ttk.Label(frame, text="Rüstcode:" ) ruestcode_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.ruestcode_sivas = tk.StringVar() ruestcode_entry = ttk.Entry(frame, textvariable=self.ruestcode_sivas) ruestcode_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.ruestcode_neu = tk.StringVar() ruestcode_neu_combo = ttk.Combobox(frame, textvariable=self.ruestcode_neu) ruestcode_neu_combo['values'] = ruestcodes ruestcode_neu_combo['state'] = 'readonly' ruestcode_neu_combo.bind('<>', lambda event:self.callback('cb_ruestcode_neu')) ruestcode_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Fertigungsart fertigungsart_label = ttk.Label(frame, text="Fertigungsart:" ) fertigungsart_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.fertigungsart_sivas = tk.StringVar() fertigungsart_entry = ttk.Entry(frame, textvariable=self.fertigungsart_sivas) fertigungsart_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.fertigungsart_neu = tk.StringVar() fertigungsart_neu_combo = ttk.Combobox(frame, textvariable=self.fertigungsart_neu) fertigungsart_neu_combo['values'] = categories fertigungsart_neu_combo['state'] = 'readonly' fertigungsart_neu_combo.bind('<>', lambda event:self.callback('cb_fertigungsart_neu')) fertigungsart_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Allgmeintoleranz allgemeintoleranz_label = ttk.Label(frame, text="Allgemeintoleranz:" ) allgemeintoleranz_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.allgemeintoleranz_sivas = tk.StringVar() allgemeintoleranz_entry = ttk.Entry(frame, textvariable=self.allgemeintoleranz_sivas) allgemeintoleranz_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.allgemeintoleranz_neu = tk.StringVar() allgemeintoleranz_neu_combo = ttk.Combobox(frame, textvariable=self.allgemeintoleranz_neu) allgemeintoleranz_neu_combo['values'] = categories allgemeintoleranz_neu_combo['state'] = 'readonly' allgemeintoleranz_neu_combo.bind('<>', lambda event:self.callback('cb_allgemeintoleranz_neu')) allgemeintoleranz_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # FOS-Gruppe fosGruppe_label = ttk.Label(frame, text="FOS-Gruppe:" ) fosGruppe_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.fosGruppe_sivas = tk.StringVar() fosGruppe_entry = ttk.Entry(frame, textvariable=self.fosGruppe_sivas) fosGruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.fosGruppe_neu = tk.StringVar() fosGruppe_neu_combo = ttk.Combobox(frame, textvariable=self.fosGruppe_neu) fosGruppe_neu_combo['values'] = categories fosGruppe_neu_combo['state'] = 'readonly' fosGruppe_neu_combo.bind('<>', lambda event:self.callback('cb_fosGruppe_neu')) fosGruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Kalulationsart kalkulationsart_label = ttk.Label(frame, text="Kalkulationsart:" ) kalkulationsart_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.kalkulationsart_sivas = tk.StringVar() kalkulationsart_entry = ttk.Entry(frame, textvariable=self.kalkulationsart_sivas) kalkulationsart_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.kalkulationsart_neu = tk.StringVar() kalkulationsart_neu_combo = ttk.Combobox(frame, textvariable=self.kalkulationsart_neu) kalkulationsart_neu_combo['values'] = categories kalkulationsart_neu_combo['state'] = 'readonly' kalkulationsart_neu_combo.bind('<>', lambda event:self.callback('cb_kalkulationsart_neu')) kalkulationsart_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 separator = ttk.Separator(frame, orient='horizontal') separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 def get_data(self): return { "halbzeugOhneSaege_sivas": self.halbzeugOhneSaege_sivas.get(), "halbzeugOhneSaege_neu": self.halbzeugOhneSaege_neu.get(), "ruestcode_sivas": self.ruestcode_sivas.get(), "ruestcode_neu": self.ruestcode_neu.get(), "fertigungsart_sivas": self.fertigungsart_sivas.get(), "fertigungsart_neu": self.fertigungsart_neu.get(), "allgemeintoleranz_sivas": self.allgemeintoleranz_sivas.get(), "allgemeintoleranz_neu": self.allgemeintoleranz_neu.get(), "fosGruppe_sivas": self.fosGruppe_sivas.get(), "fosGruppe_neu": self.fosGruppe_neu.get(), "kalkulationsart_sivas": self.kalkulationsart_sivas.get(), "kalkulationsart_neu": self.kalkulationsart_neu.get(), } def data_from_model(self): data = self.get_controller().get_all_gui_data() if 'halbzeugOhneSaege_sivas' in data: self.halbzeugOhneSaege_sivas.set(data["halbzeugOhneSaege_sivas"]) if 'halbzeugOhneSaege_neu' in data: self.halbzeugOhneSaege_neu.set(data["halbzeugOhneSaege_neu"]) if 'ruestcode_sivas' in data: self.ruestcode_sivas.set(data["ruestcode_sivas"]) if 'ruestcode_neu' in data: self.ruestcode_neu.set(data["ruestcode_neu"]) if 'fertigungsart_sivas' in data: self.fertigungsart_sivas.set(data["fertigungsart_sivas"]) if 'fertigungsart_neu' in data: self.fertigungsart_neu.set(data["fertigungsart_neu"]) if 'allgemeintoleranz_sivas' in data: self.allgemeintoleranz_sivas.set(data["allgemeintoleranz_sivas"]) if 'allgemeintoleranz_neu' in data: self.allgemeintoleranz_neu.set(data["allgemeintoleranz_neu"]) if 'fosGruppe_sivas' in data: self.fosGruppe_sivas.set(data["fosGruppe_sivas"]) if 'fosGruppe_neu' in data: self.fosGruppe_neu.set(data["fosGruppe_neu"]) if 'kalkulationsart_sivas' in data: self.kalkulationsart_sivas.set(data["kalkulationsart_sivas"]) if 'kalkulationsart_neu' in data: self.kalkulationsart_neu.set(data["kalkulationsart_neu"]) class RightFrameBeschaffungsart(AllFrames): def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 categories = configs.Allgemein.get_options("Kategorien") # Beschaffungsart beschaffungsart_label = ttk.Label(frame, text="Beschaffungsart:" ) beschaffungsart_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.beschaffungsart_sivas = tk.StringVar() beschaffungsart_entry = ttk.Entry(frame, textvariable=self.beschaffungsart_sivas) beschaffungsart_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.beschaffungsart_neu = tk.StringVar() beschaffungsart_combo = ttk.Combobox(frame, textvariable=self.beschaffungsart_neu) beschaffungsart_combo['values'] = categories beschaffungsart_combo['state'] = 'readonly' beschaffungsart_combo.bind('<>', lambda event:self.callback('cb_beschaffungsart_neu')) beschaffungsart_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Mengeneinheit mengeneinheit_label = ttk.Label(frame, text="Mengeneinheit:" ) mengeneinheit_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.mengeneinheit_sivas = tk.StringVar() mengeneinheit_entry = ttk.Entry(frame, textvariable=self.mengeneinheit_sivas) mengeneinheit_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.mengeneinheit_neu = tk.StringVar() mengeneinheit_combo = ttk.Combobox(frame, textvariable=self.mengeneinheit_neu) mengeneinheit_combo['values'] = categories mengeneinheit_combo['state'] = 'readonly' mengeneinheit_combo.bind('<>', lambda event:self.callback('cb_mengeneinheit_neu')) mengeneinheit_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Halbzeug halbzeug_label = ttk.Label(frame, text="Halbzeug:" ) halbzeug_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeug_sivas = tk.StringVar() halbzeug_entry = ttk.Entry(frame, textvariable=self.halbzeug_sivas) halbzeug_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeug_neu = tk.StringVar() halbzeug_combo = ttk.Combobox(frame, textvariable=self.halbzeug_neu) halbzeug_combo['values'] = ['ja','nein'] halbzeug_combo['state'] = 'readonly' halbzeug_combo.bind('<>', lambda event:self.callback('cb_halbzeug_neu')) halbzeug_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 separator = ttk.Separator(frame, orient='horizontal') separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 def get_data(self): return { "beschaffungsart_sivas": self.beschaffungsart_sivas.get(), "beschaffungsart_neu": self.beschaffungsart_neu.get(), "mengeneinheit_sivas": self.mengeneinheit_sivas.get(), "mengeneinheit_neu": self.mengeneinheit_neu.get(), "halbzeug_sivas": self.halbzeug_sivas.get(), "halbzeug_neu": self.halbzeug_neu.get(), } def data_from_model(self): data = self.get_controller().get_all_gui_data() if 'beschaffungsart_sivas' in data: self.beschaffungsart_sivas.set(data["beschaffungsart_sivas"]) if 'beschaffungsart_neu' in data: self.beschaffungsart_neu.set(data["beschaffungsart_neu"]) if 'mengeneinheit_sivas' in data: self.mengeneinheit_sivas.set(data["mengeneinheit_sivas"]) if 'mengeneinheit_neu' in data: self.mengeneinheit_neu.set(data["mengeneinheit_neu"]) if 'halbzeug_sivas' in data: self.halbzeug_sivas.set(data["halbzeug_sivas"]) if 'halbzeug_neu' in data: self.halbzeug_neu.set(data["halbzeug_neu"]) class RightFrameTOSGruppe(AllFrames): def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 categories = configs.Allgemein.get_options("Kategorien") # TOS-Gruppe tosgruppe_label = ttk.Label(frame, text="TOS-Gruppe:" ) tosgruppe_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.tosgruppe_sivas = tk.StringVar() tosgruppe_entry = ttk.Entry(frame, textvariable=self.tosgruppe_sivas) tosgruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.tosgruppe_neu = tk.StringVar() tosgruppe_neu_entry = ttk.Entry(frame, textvariable=self.tosgruppe_neu) tosgruppe_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Dispogruppe dispogruppe_label = ttk.Label(frame, text="Dispogruppe:" ) dispogruppe_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.dispogruppe_sivas = tk.StringVar() dispogruppe_entry = ttk.Entry(frame, textvariable=self.dispogruppe_sivas) dispogruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.dispogruppe_neu = tk.StringVar() dispogruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispogruppe_neu) dispogruppe_neu_combo['values'] = categories dispogruppe_neu_combo['state'] = 'readonly' dispogruppe_neu_combo.bind('<>', lambda event:self.callback('cb_dispogruppe_neu')) dispogruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Dispolaufgruppe dispolaufgruppe_label = ttk.Label(frame, text="Dispolaufgruppe:" ) dispolaufgruppe_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.dispolaufgruppe_sivas = tk.StringVar() dispolaufgruppe_entry = ttk.Entry(frame, textvariable=self.dispolaufgruppe_sivas) dispolaufgruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.dispolaufgruppe_neu = tk.StringVar() dispolaufgruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispolaufgruppe_neu) dispolaufgruppe_neu_combo['values'] = categories dispolaufgruppe_neu_combo['state'] = 'readonly' dispolaufgruppe_neu_combo.bind('<>', lambda event:self.callback('cb_dispolaufgruppe_neu')) dispolaufgruppe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Ersatz für ersatzfuer_label = ttk.Label(frame, text="Ersatz für:" ) ersatzfuer_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.ersatzfuer_sivas = tk.StringVar() ersatzfuer_entry = ttk.Entry(frame, textvariable=self.ersatzfuer_sivas) ersatzfuer_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.ersatzfuer_neu = tk.StringVar() ersatzfuer_neu_entry = ttk.Entry(frame, textvariable=self.ersatzfuer_neu) ersatzfuer_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Ersetzt durch ersetztdurch_label = ttk.Label(frame, text="Ersetzt durch:" ) ersetztdurch_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.ersetztdurch_sivas = tk.StringVar() ersetztdurch_entry = ttk.Entry(frame, textvariable=self.ersetztdurch_sivas) ersetztdurch_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.ersetztdurch_neu = tk.StringVar() ersetztdurch_neu_entry = ttk.Entry(frame, textvariable=self.ersetztdurch_neu) ersetztdurch_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Ersetzt durch # Hersteller hersteller_label = ttk.Label(frame, text="Hersteller:" ) hersteller_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.hersteller_sivas = tk.StringVar() hersteller_entry = ttk.Entry(frame, textvariable=self.hersteller_sivas) hersteller_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.hersteller_neu = tk.StringVar() hersteller_neu_combo = ttk.Combobox(frame, textvariable=self.hersteller_neu) hersteller_neu_combo['values'] = categories hersteller_neu_combo['state'] = 'readonly' hersteller_neu_combo.bind('<>', lambda event:self.callback('cb_hersteller_neu')) hersteller_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Hersteller Teilenummer herstteilenr_label = ttk.Label(frame, text="Hersteller Teilenummer:" ) herstteilenr_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.herstteilenr_sivas = tk.StringVar() herstteilenr_entry = ttk.Entry(frame, textvariable=self.herstteilenr_sivas) herstteilenr_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.herstteilenr_neu = tk.StringVar() herstteilenr_neu_entry = ttk.Entry(frame, textvariable=self.herstteilenr_neu) herstteilenr_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Ersetzt durch separator = ttk.Separator(frame, orient='horizontal') separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 def get_data(self): return { "tosgruppe_neu": self.tosgruppe_neu.get(), "tosgruppe_sivas": self.tosgruppe_sivas.get(), "dispogruppe_neu": self.dispogruppe_neu.get(), "dispogruppe_sivas": self.dispogruppe_sivas.get(), "dispolaufgruppe_neu": self.dispolaufgruppe_neu.get(), "dispolaufgruppe_sivas": self.dispolaufgruppe_sivas.get(), "hersteller_neu": self.hersteller_neu.get(), "hersteller_sivas": self.hersteller_sivas.get(), "ersatzfuer_neu": self.ersatzfuer_neu.get(), "ersatzfuer_sivas": self.ersatzfuer_sivas.get(), "ersetztdurch_neu": self.ersetztdurch_neu.get(), "ersetztdurch_sivas": self.ersetztdurch_sivas.get(), "herstteilenr_sivas": self.herstteilenr_sivas.get(), "herstteilenr_neu": self.herstteilenr_neu.get(), } def data_from_model(self): data = self.get_controller().get_all_gui_data() if 'tosgruppe_sivas' in data: self.tosgruppe_sivas.set(data["tosgruppe_sivas"]) if 'tosgruppe_neu' in data: self.tosgruppe_neu.set(data["tosgruppe_neu"]) if 'dispogruppe_sivas' in data: self.dispogruppe_sivas.set(data["dispogruppe_sivas"]) if 'dispogruppe_neu' in data: self.dispogruppe_neu.set(data["dispogruppe_neu"]) if 'dispolaufgruppe_sivas' in data: self.dispolaufgruppe_sivas.set(data["dispolaufgruppe_sivas"]) if 'dispolaufgruppe_neu' in data: self.dispolaufgruppe_neu.set(data["dispolaufgruppe_neu"]) if 'ersatzfuer_sivas' in data: self.ersatzfuer_sivas.set(data["ersatzfuer_sivas"]) if 'ersatzfuer_neu' in data: self.ersatzfuer_neu.set(data["ersatzfuer_neu"]) if 'ersetztdurch_sivas' in data: self.ersetztdurch_sivas.set(data["ersetztdurch_sivas"]) if 'ersetztdurch_neu' in data: self.ersetztdurch_neu.set(data["ersetztdurch_neu"]) if 'hersteller_sivas' in data: self.hersteller_sivas.set(data["hersteller_sivas"]) if 'hersteller_neu' in data: self.hersteller_neu.set(data["hersteller_neu"]) if 'herstteilenr_sivas' in data: self.herstteilenr_sivas.set(data["herstteilenr_sivas"]) if 'herstteilenr_neu' in data: self.herstteilenr_neu.set(data["herstteilenr_neu"]) class RightFrameWerkstoffdiskrepanz(AllFrames): def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 categories = configs.Allgemein.get_options("Kategorien") wnamen = configs.Werkstoffe.get_werkstoff_namen() # Werkstoffdiskrepanz werkstoffdiskr_label = ttk.Label(frame, text="Werkstoffdiskrepanz:") werkstoffdiskr_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.werkstoffdiskrepanz= None werkstoffdiskr_checkbutton = ttk.Checkbutton(frame, #text='ja', variable=self.werkstoffdiskrepanz, command=lambda: self.callback("cb_werkstoffdiskrepanz"), onvalue=True, offvalue=False) werkstoffdiskr_checkbutton.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Werkstofftyp werkstofftyp_label = ttk.Label(frame, text="Werkstofftyp:" ) werkstofftyp_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.werkstofftyp_neu = tk.StringVar() werkstofftyp_neu_combo = ttk.Combobox(frame, textvariable=self.werkstofftyp_neu) werkstofftyp_neu_combo['values'] = wnamen werkstofftyp_neu_combo['state'] = 'readonly' werkstofftyp_neu_combo.bind('<>', lambda event:self.callback('cb_werkstofftyp_neu')) werkstofftyp_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Material material_label = ttk.Label(frame, text="Material:" ) material_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.material_sivas = tk.StringVar() material_entry = ttk.Entry(frame, textvariable=self.material_sivas) material_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.material_neu = tk.StringVar() material_neu_combo = ttk.Combobox(frame, textvariable=self.material_neu) material_neu_combo['values'] = categories material_neu_combo['state'] = 'readonly' material_neu_combo.bind('<>', lambda event:self.callback('cb_material_neu')) material_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Oberfläche oberflaeche_label = ttk.Label(frame, text="Oberfläche:" ) oberflaeche_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.oberflaeche_neu = tk.StringVar() oberflaeche_neu_combo = ttk.Combobox(frame, textvariable=self.oberflaeche_neu) oberflaeche_neu_combo['values'] = categories oberflaeche_neu_combo['state'] = 'readonly' oberflaeche_neu_combo.bind('<>', lambda event:self.callback('cb_oberflaeche_neu')) oberflaeche_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Farbe farbe_label = ttk.Label(frame, text="Farbe:" ) farbe_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.farbe_neu = tk.StringVar() farbe_neu_combo = ttk.Combobox(frame, textvariable=self.farbe_neu) farbe_neu_combo['values'] = categories farbe_neu_combo['state'] = 'readonly' farbe_neu_combo.bind('<>', lambda event:self.callback('cb_farbe_neu')) farbe_neu_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 separator = ttk.Separator(frame, orient='horizontal') separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 def get_data(self): return { "werkstoffdiskr_sivas": self.werkstoffdiskrepanz, "werkstofftyp_sivas": self.werkstofftyp_sivas.get(), "werkstofftyp_neu": self.werkstofftyp_neu.get(), "material_sivas": self.material_sivas.get(), "material_neu": self.material_neu.get(), "oberflaeche_neu": self.oberflaeche_neu.get(), "farbe_neu": self.farbe_neu.get(), } def data_from_model(self): data = self.get_controller().get_all_gui_data() if 'werkstoffdiskr_sivas' in data: self.werkstoffdiskr_sivas(data["werkstoffdiskr_sivas"]) if 'werkstofftyp_sivas' in data: self.werkstofftyp_sivas.set(data["werkstofftyp_sivas"]) if 'werkstofftyp_neu' in data: self.werkstofftyp_neu.set(data["werkstofftyp_neu"]) if 'material_sivas' in data: self.material_sivas.set(data["material_sivas"]) if 'material_neu' in data: self.material_neu.set(data["material_neu"]) if 'oberflaeche_neu' in data: self.oberflaeche_neu.set(data["oberflaeche_neu"]) if 'farbe_neu' in data: self.farbe_neu.set(data["farbe_neu"]) class RightFrameVersion(AllFrames): def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 categories = configs.Allgemein.get_options("Kategorien") # Version version_label = ttk.Label(frame, text="Version:" ) version_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.version_sivas = tk.StringVar() version_entry = ttk.Entry(frame, textvariable=self.version_sivas) version_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.version_neu = tk.StringVar() version_neu_entry = ttk.Entry(frame, textvariable=self.version_neu) version_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Änderungsindex aenderungsindex_label = ttk.Label(frame, text="Änderungsindex:" ) aenderungsindex_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.aenderungsindex_sivas = tk.StringVar() aenderungsindex_entry = ttk.Entry(frame, textvariable=self.aenderungsindex_sivas) aenderungsindex_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.aenderungsindex_neu = tk.StringVar() aenderungsindex_neu_entry = ttk.Entry(frame, textvariable=self.aenderungsindex_neu) aenderungsindex_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Änderungstext aenderungstext_label = ttk.Label(frame, text="Änderungstext:" ) aenderungstext_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.aenderungstext_sivas = tk.StringVar() aenderungstext_entry = ttk.Entry(frame, textvariable=self.aenderungstext_sivas) aenderungstext_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.aenderungstext_neu = tk.StringVar() aenderungstext_neu_entry = ttk.Entry(frame, textvariable=self.aenderungstext_neu) aenderungstext_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Freigabevermerk freigabevermerk_label = ttk.Label(frame, text="Freigabevermerk:" ) freigabevermerk_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.freigabevermerk_sivas = tk.StringVar() freigabevermerk_entry = ttk.Entry(frame, textvariable=self.freigabevermerk_sivas) freigabevermerk_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.freigabevermerk_neu = tk.StringVar() freigabevermerk_neu_entry = ttk.Entry(frame, textvariable=self.freigabevermerk_neu) freigabevermerk_neu_entry.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 separator = ttk.Separator(frame, orient='horizontal') separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 def get_data(self): return { "version_sivas": self.version_sivas.get(), "version_neu": self.version_neu.get(), "aenderungsindex_sivas": self.aenderungsindex_sivas.get(), "aenderungsindex_neu": self.aenderungsindex_neu.get(), "aenderungstext_sivas": self.aenderungstext_sivas.get(), "aenderungstext_neu": self.aenderungstext_neu.get(), "freigabevermerk_sivas": self.freigabevermerk_sivas.get(), "freigabevermerk_neu": self.freigabevermerk_neu.get(), } def data_from_model(self): data = self.get_controller().get_all_gui_data() if 'version_sivas' in data: self.version_sivas.set(data["version_sivas"]) if 'version_neu' in data: self.version_neu.set(data["version_neu"]) if 'aenderungsindex_sivas' in data: self.aenderungsindex_sivas.set(data["aenderungsindex_sivas"]) if 'aenderungsindex_neu' in data: self.aenderungsindex_neu.set(data["aenderungsindex_neu"]) if 'aenderungstext_sivas' in data: self.aenderungstext_sivas.set(data["aenderungstext_sivas"]) if 'aenderungstext_neu' in data: self.aenderungstext_neu.set(data["aenderungstext_neu"]) if 'freigabevermerk_sivas' in data: self.freigabevermerk_sivas.set(data["freigabevermerk_sivas"]) if 'freigabevermerk_neu' in data: self.freigabevermerk_neu.set(data["freigabevermerk_neu"]) class RightFrameZusatzinfos(AllFrames): def __init__(self, frame, nrow=0, configs=None): AllFrames.__init__(self, nrow) self.frame = frame self.build_widgets(configs) def build_widgets(self, configs): frame = self.frame self.rownum = AllFrames.get_rows(self) col_left = 0 # Zusatzinformationen automatisch zusatzinfos_auto_label = ttk.Label(frame, text="Zusatzinformationen\nautomatisch:") zusatzinfos_auto_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.zusatzinfos_auto_text = tk.StringVar() zusatzinfos_auto_entry = ttk.Entry(frame, textvariable=self.zusatzinfos_auto_text) zusatzinfos_auto_entry.grid(column=col_left+1, columnspan=2, row=self.rownum, sticky=tk.EW+tk.NS, padx=3, pady=3) self.rownum += 1 # Zusatzinformationen Benutzerdefiniert zusatzinfos_bendef_label = ttk.Label(frame, text="Zusatzinformationen\nBenutzerdefiniert:") zusatzinfos_bendef_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.zusatzinfos_bendef_text = tk.StringVar() zusatzinfos_bendef_entry = ttk.Entry(frame, textvariable=self.zusatzinfos_bendef_text) zusatzinfos_bendef_entry.grid(column=col_left+1, columnspan=2, row=self.rownum, sticky=tk.EW+tk.NS, padx=3, pady=3) self.rownum += 1 separator = ttk.Separator(frame, orient='horizontal') separator.grid(column=col_left, columnspan=3, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 speichern_button = ttk.Button(frame, text="Speichern", command=lambda: self.callback("cb_speichern")) speichern_button.grid(column=col_left, row=self.rownum, sticky=tk.EW, padx=3, pady=3) migrieren_button = ttk.Button(frame, text="migrieren", command=lambda: self.callback("cb_migrieren")) migrieren_button.grid(column=col_left+1, row=self.rownum, sticky=tk.EW, padx=3, pady=3) zuruecksetzen_button = ttk.Button(frame, text="zurücksetzen", command=lambda: self.callback("cb_zurücksetzen")) zuruecksetzen_button.grid(column=col_left+2, row=self.rownum, sticky=tk.EW, padx=3, pady=3) def get_data(self): return { "zusatzinfos_auto_text": self.zusatzinfos_auto_text.get(), "zusatzinfos_bendef_text": self.zusatzinfos_bendef_text.get(), } def data_from_model(self): data = self.get_controller().get_all_gui_data() if 'zusatzinfos_auto_text' in data: self.zusatzinfos_auto_text.set(data["zusatzinfos_auto_text"]) if 'zusatzinfos_bendef_text' in data: self.zusatzinfos_bendef_text.set(data["zusatzinfos_bendef_text"]) class App(): 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. # self.root.columnconfigure(0, weight=2) self.root.columnconfigure(1, weight=1) #self.root.geometry('800x800') style = ttk.Style(self.root) style.theme_use('clam') # gesamtes Fenster durch Scrollbar, aber auch mit Mausrad verschieben self.root.bind('', self.OnMouseWheel) container = ttk.Frame(root) canvas = tk.Canvas(container, width=800, height=900) # canvas = tk.Canvas(container) self.canvas = canvas # baue eine globale Scrollbar ganz rechts vscrollbar = ttk.Scrollbar(container, orient='vertical', command=canvas.yview) # verknüpfe Scrollbar und Canvas canvas.bind( '', lambda e: canvas.configure( scrollregion=canvas.bbox("all") ) ) canvas.configure(yscrollcommand=vscrollbar.set) inner_frame = ttk.Frame(canvas) canvas.create_window((0, 0), window=inner_frame, anchor="nw") container.pack() canvas.pack(side="left", fill="both", expand=True) vscrollbar.pack(side="right", fill="y") # einen linken und rechten Rahmen darin # left_frame = ttk.Frame(inner_frame, width=200, height=800) left_frame = ttk.Frame(inner_frame) left_frame.grid(row=0, column=0, padx=10, pady=3) # right_frame = ttk.Frame(inner_frame, width=650, height=800) right_frame = ttk.Frame(inner_frame) right_frame.grid(row=0, column=1, padx=10, pady=3) self.lf1 = LeftFrameAsm(left_frame, 0, configs) nrows = self.lf1.get_rows() self.lf2 = TreeView(left_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.rf3 = RightFrameBezeichnung(right_frame, nrows, configs) nrows = self.rf3.get_rows() self.rf4 = RightFrameHalbzeugOhneS(right_frame, nrows, configs) nrows = self.rf4.get_rows() self.rf5 = RightFrameBeschaffungsart(right_frame, nrows, configs) nrows = self.rf5.get_rows() self.rf6 = RightFrameTOSGruppe(right_frame, nrows, configs) nrows = self.rf6.get_rows() self.rf7 = RightFrameWerkstoffdiskrepanz(right_frame, nrows, configs) nrows = self.rf7.get_rows() self.rf8 = RightFrameVersion(right_frame, nrows, configs) nrows = self.rf8.get_rows() self.rf9 = RightFrameZusatzinfos(right_frame, nrows, configs) nrows = self.rf9.get_rows() def data_from_model(self): """ methode zum Auslesen aller Daten der Oberfläche aus dem Modell """ self.lf1.data_from_model() self.lf2.data_from_model() self.rf1.data_from_model() self.rf2.data_from_model() self.rf3.data_from_model() self.rf4.data_from_model() self.rf5.data_from_model() self.rf6.data_from_model() self.rf7.data_from_model() self.rf8.data_from_model() self.rf9.data_from_model() def set_controller(self, controller): """ merken des Handels auf den Controller in jedem Widget""" self._controller = controller self.lf1.set_controller(controller) self.lf2.set_controller(controller) self.rf1.set_controller(controller) self.rf2.set_controller(controller) self.rf3.set_controller(controller) self.rf4.set_controller(controller) self.rf5.set_controller(controller) self.rf6.set_controller(controller) self.rf7.set_controller(controller) self.rf8.set_controller(controller) self.rf9.set_controller(controller) def mainloop(self): self.root.mainloop() def OnMouseWheel(self,event): self.canvas.yview("scroll", event.delta, "units") return "break" if __name__ == "__main__": """ using the Model-View-Controller (MVC) Pattern - The MODEL is responsible for managing the data of the application. It receives user input from the CONTROLLER - The VIEW renders presentation of the model in a particular format. - The CONTROLLER responds to the user input and performs interactions on the data model objects. The CONTROLLER receives the input, optionally validates it and then passes the input to the model. <--fills gui -- --manipulates--> --user input-> <--give model data-- """