import tkinter as tk from tkinter import ttk from tkinter import filedialog import os #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 self._text_width = 40 self._entry_text_width = 45 self._combo_width = 42 def get_entry_text_width(self): return self._entry_text_width def get_combo_width(self): return self._combo_width def get_text_width(self): return self._text_width 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, value): """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, value) class TreeView(): def __init__(self, frame, nrow=0): # a treeview # hier Anzahl der sichtbaren Zeilen des Baums angeben: self.tree = ttk.Treeview(frame, height=65) # 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: self.trid2sivasId = dict() def set_controller(self, controller): self._controller = controller def refresh(self, parent_children_mapping, red_ids, orange_ids): self.clear() self.create(parent_children_mapping, red_ids, orange_ids) def clear(self): for c in self.tree.get_children(): self.tree.delete(c) def _has_childs(self, sid, parent_children_mapping): '''gibt zurück ob sid ein ein Zwischenknoten eines Baume ist, also kein Blatt hat''' for parent,children in parent_children_mapping.items(): if sid == parent: return True return False def create(self, parent_children_mapping, red_ids, orange_ids): pool = dict() for parent, children in parent_children_mapping.items(): # parent erzeugen, falls es diese nicht schon gibt (check der pool ids) if parent not in pool: if parent not in red_ids: rowtags = ('good') elif parent in orange_ids: rowtags = ('orange') else: rowtags = ('missing') parent_id = self.tree.insert('', tk.END, text=parent, tags=rowtags, open=True) self.trid2sivasId[parent_id] = parent # merken für Doppelklick pool[parent] = parent_id else: parent_id = pool[parent] for child in children: if child not in red_ids: rowtags = ('good') elif child in orange_ids: rowtags = ('orange') else: rowtags = ('missing') if self._has_childs(child, parent_children_mapping) == True: # wenn das Objekt ein Kind hat, könnte es bereits erzeugt worden sein if child not in pool: child_id = self.tree.insert('', tk.END, text=child, tags=rowtags, open=True) pool[child] = child_id self.trid2sivasId[child_id] = child # merken für Doppelklick else: child_id = pool[child] else: # die Blätter des Baumes kann man bedenkenlos immer bauen. Diese können redundante Texte haben. child_id = self.tree.insert('', tk.END, text=child, tags=rowtags, open=True) pool[child] = child_id # hier werden die keys - sivas Nummern auch überschrieben self.trid2sivasId[child_id] = child # merken der eindeutigen Zuordnung für den späteren Doppelklick self.tree.move(child_id, parent_id, 'end') # 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('yellow', background='yellow') self.tree.tag_configure('orange', background='orange') 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() orange_ids = self._controller.get_orange_ids(red_ids) self.refresh(parent_children_mapping, red_ids, orange_ids) def item_selected(self, event): """callback of TK if an item in the tree has been selected """ trid = self.tree.selection()[0] # trage die neue ID ins Modell ein cid = self.trid2sivasId[trid] self._controller.set_current_item_id(cid) class LeftFrameAsm(AllFrames): def __init__(self, frame, nrow=0): 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=3, pady=3) self.rownum += 1 self.asm_number = tk.StringVar() asm_entry = ttk.Entry(frame, textvariable=self.asm_number, width=9, font=("Calibri",15)) asm_entry.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 #search_iconpath = os.path.join(configs.get_cfg_path(), 'images', 'search.png') #search_icon = tk.PhotoImage(file=search_iconpath) # Resizing image to fit on button #photoimage = search_icon.subsample(3, 3) asm_search_button = ttk.Button( frame, text="Suche", #image=photoimage, compound = tk.LEFT, command=lambda: self.callback("cb_suche_asm", self.asm_number.get()) ) asm_search_button.grid(column=col_left, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 asm_loadlocal_button = ttk.Button( frame, text="Lade lokal", #image=photoimage, compound = tk.LEFT, command=lambda: self.callback("cb_ladelokal_asm", self.asm_number.get()) ) asm_loadlocal_button.grid(column=col_left, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 def get_data(self): return { "asm_id": self.asm_number.get(), } def data_from_model(self): self.clear() data = self.get_controller().get_all_gui_data() if 'asm_id' in data: self.asm_number.set(data["asm_id"]) def set_states(self): # not yet implemented. Not used pass def clear(self): # not yet implemented. Not used pass class RightFrameLabels(AllFrames): def __init__(self, frame, nrow=0): 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 # Teilenummer teilenummer_label = ttk.Label(frame, text="Teilenummer:", foreground='blue') 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, font=("Calibri",15), state="readonly") 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.teilenummer_text.get())) 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): self.clear() data = self.get_controller().get_all_gui_data() if 'teilenummer' in data: self.teilenummer_text.set(data["teilenummer"]) def set_states(self): data = self.get_controller().get_gui_states() if 'teilenummer' in data: self.teilenummer_text["state"] = data['teilenummer'] def clear(self): self.teilenummer_text.set("") class RightFramePDM(AllFrames): def __init__(self, frame, nrow=0): 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 # Datenbank Schulung oder Produktiv datenbank_label = ttk.Label(frame, text="Datenbank:", foreground='blue' ) datenbank_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.datenbank = tk.StringVar() self.datenbank.set("Schulung") # default self.datenbank_prod = ttk.Radiobutton(frame, text="Produktiv", variable=self.datenbank, value="Produktiv") self.datenbank_prod .grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 self.datenbank_schul = ttk.Radiobutton(frame, text="Schulung", variable=self.datenbank, value="Schulung") self.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:", foreground='blue' ) pdmkategorie_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.pdm_category = tk.StringVar() self.pdmkategorie_combo = ttk.Combobox(frame, textvariable=self.pdm_category, width=AllFrames.get_combo_width(self)) #self.pdmkategorie_combo['values'] = categories self.pdmkategorie_combo['state'] = 'readonly' self.pdmkategorie_combo.bind('<>', lambda event:self.callback('cb_pdm_kategorie_neu', self.pdm_category.get())) self.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 = tk.BooleanVar() self.neuaufbau_checkbutton = ttk.Checkbutton(frame, #text='ja', variable=self.neuaufbau, command=lambda:self.callback("cb_neuaufbau", self.neuaufbau.get()), onvalue=True, offvalue=False) self.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 = tk.BooleanVar() self.aushalbzeug_checkbutton = ttk.Checkbutton(frame, #text='neu', variable=self.aus_halbzeug_neu, command=lambda:self.callback("cb_aus_halbzeug_neu", self.aus_halbzeug_neu.get()), onvalue=True, offvalue=False) self.aushalbzeug_checkbutton.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() self.halbzeugnummer_neu_entry = ttk.Entry(frame, textvariable=self.halbzeugnummer_neu, width=AllFrames.get_entry_text_width(self)) self.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() self.halbzeuglaenge_neu_entry = ttk.Entry(frame, textvariable=self.halbzeuglaenge_neu, width=AllFrames.get_entry_text_width(self)) self.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="Halbzeugoberfläche:") halbzeugoberflaeche_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeugoberflaeche_neu = tk.StringVar() self.halbzeugoberflaeche_combo = ttk.Combobox(frame, textvariable=self.halbzeugoberflaeche_neu, width=AllFrames.get_combo_width(self)) self.halbzeugoberflaeche_combo['state'] = 'readonly' self.halbzeugoberflaeche_combo.bind('<>', lambda event:self.callback('cb_halbzeugoberflaeche', self.halbzeugoberflaeche_neu.get())) self.halbzeugoberflaeche_combo.grid(column=col_left+2, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # HalbzeugFarbe halbzeugfarbe_label = ttk.Label(frame, text="Halbzeugfarbe:", foreground='steel blue' ) halbzeugfarbe_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeugfarbe_neu = tk.StringVar() self.halbzeugfarbe_combo = ttk.Combobox(frame, textvariable=self.halbzeugfarbe_neu, width=AllFrames.get_combo_width(self)) self.halbzeugfarbe_combo['state'] = 'readonly' self.halbzeugfarbe_combo.bind('<>', lambda event:self.callback('cb_halbzeugfarbe', self.halbzeugfarbe_neu.get())) self.halbzeugfarbe_combo.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:", foreground='blue' ) lebenszyklusstatus_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.lebenszyklus_status_neu = tk.StringVar() self.lebenszyklusstatus_combo = ttk.Combobox(frame, textvariable=self.lebenszyklus_status_neu, width=AllFrames.get_combo_width(self)) self.lebenszyklusstatus_combo['state'] = 'readonly' self.lebenszyklusstatus_combo.bind('<>', lambda event:self.callback('cb_lebenszyklus_status_neu', self.lebenszyklus_status_neu.get())) self.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:", foreground='blue') model3d_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.model3d_neu = tk.StringVar() self.model3d_combo = ttk.Combobox(frame, textvariable=self.model3d_neu, justify='right', width=AllFrames.get_combo_width(self)) self.model3d_combo['state'] = 'readonly' self.model3d_combo.bind('<>', lambda event:self.callback('cb_3Dmodel_neu', self.model3d_neu.get())) self.model3d_combo.grid(column=col_left+1, columnspan=2, row=self.rownum, sticky=tk.EW, padx=3, pady=3) self.rownum += 1 #lambda: self.callback("cb_speichern", None) self.suche3d_button = ttk.Button(frame, text="Durchsuchen..", command=lambda: self.callback("cb_3dsuchen", None)) self.suche3d_button.grid(column=col_left+2, row=self.rownum, sticky=tk.EW) self.rownum += 1 def get_data(self): return { "datenbank": self.datenbank.get(), "pdm_kategorie_neu": self.pdm_category.get(), "neuaufbau": self.neuaufbau.get(), "aus_halbzeug_neu": self.aus_halbzeug_neu.get(), "halbzeugnummer_neu": self.halbzeugnummer_neu.get(), "halbzeuglaenge_neu": self.halbzeuglaenge_neu.get(), "halbzeugoberflaeche_neu": self.halbzeugoberflaeche_neu.get(), "halbzeugfarbe_neu": self.halbzeugfarbe_neu.get(), "lebenszyklus_status_neu": self.lebenszyklus_status_neu.get(), "model3d_neu": self.model3d_neu.get(), # ab hier die Dropdowns der Oberfläche auslesen. "cb_pdm_kategorie_neu": self.pdmkategorie_combo['values'], "cb_lebenszyklus_status_neu": self.lebenszyklusstatus_combo['values'], "cb_halbzeugoberflaeche": self.halbzeugoberflaeche_combo['values'], "cb_halbzeugfarbe": self.halbzeugfarbe_combo['values'], "cb_3Dmodel_neu": self.model3d_combo['values'], } def data_from_model(self): self.clear() data = self.get_controller().get_all_gui_data() if 'datenbank' in data: self.datenbank.set(data["datenbank"]) if 'pdm_kategorie_neu' in data: self.pdm_category.set(data["pdm_kategorie_neu"]) if 'neuaufbau' in data: self.neuaufbau.set(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 'halbzeugfarbe_neu' in data: self.halbzeugfarbe_neu.set(data["halbzeugfarbe_neu"]) if 'lebenszyklus_status_neu' in data: self.lebenszyklus_status_neu.set(data["lebenszyklus_status_neu"]) if 'model3d_neu' in data: self.model3d_neu.set(data["model3d_neu"]) if 'aus_halbzeug_neu' in data: self.aus_halbzeug_neu.set(data["aus_halbzeug_neu"]) # ab hier die Dropdowns der Oberfläche befüllen. if 'cb_pdm_kategorie_neu' in data: self.pdmkategorie_combo['values'] = data["cb_pdm_kategorie_neu"] if 'cb_lebenszyklus_status_neu' in data: self.lebenszyklusstatus_combo['values'] = data["cb_lebenszyklus_status_neu"] if 'cb_halbzeugoberflaeche' in data: self.halbzeugoberflaeche_combo['values'] = data["cb_halbzeugoberflaeche"] if 'cb_halbzeugfarbe' in data: self.halbzeugfarbe_combo['values'] = data["cb_halbzeugfarbe"] if 'cb_3Dmodel_neu' in data: self.model3d_combo['values'] = data["cb_3Dmodel_neu"] def set_states(self): data = self.get_controller().get_gui_states() # if 'datenbank' in data: # self.datenbank['state'] = data["datenbank"] if 'neuaufbau' in data: self.neuaufbau_checkbutton['state'] = data["neuaufbau"] if 'halbzeugnummer_neu' in data: self.halbzeugnummer_neu_entry['state'] = data["halbzeugnummer_neu"] if 'halbzeuglaenge_neu' in data: self.halbzeuglaenge_neu_entry['state'] = data["halbzeuglaenge_neu"] if 'aus_halbzeug_neu' in data: self.aushalbzeug_checkbutton['state'] = data["aus_halbzeug_neu"] # ab hier die Dropdowns der Oberfläche if 'cb_pdm_kategorie_neu' in data: self.pdmkategorie_combo['state'] = data["cb_pdm_kategorie_neu"] if 'cb_lebenszyklus_status_neu' in data: self.lebenszyklusstatus_combo['state'] = data["cb_lebenszyklus_status_neu"] if 'cb_halbzeugoberflaeche' in data: self.halbzeugoberflaeche_combo['state'] = data["cb_halbzeugoberflaeche"] if 'cb_halbzeugfarbe' in data: self.halbzeugfarbe_combo['state'] = data["cb_halbzeugfarbe"] if 'cb_3Dmodel_neu' in data: self.model3d_combo['state'] = data["cb_3Dmodel_neu"] # buttons if 'cb_3dsuchen' in data: self.suche3d_button['state'] =data["cb_3dsuchen"] def clear(self): self.datenbank.set('') self.pdm_category.set('') self.neuaufbau.set(False) self.aus_halbzeug_neu.set(False) self.halbzeugnummer_neu.set('') self.halbzeuglaenge_neu.set('') self.halbzeugoberflaeche_neu.set('') self.halbzeugfarbe_neu.set('') self.lebenszyklus_status_neu.set('') self.model3d_neu.set('') self.pdmkategorie_combo['values'] = '' self.halbzeugoberflaeche_combo['values'] = '' self.halbzeugfarbe_combo['values'] = '' self.lebenszyklusstatus_combo['values'] = '' self.model3d_combo['values'] = '' class RightFrameBezeichnung(AllFrames): def __init__(self, frame, nrow=0): 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 # 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 # Bezeichnung 1 bezeichnung1_label = ttk.Label(frame, text="Bezeichnung 1:", foreground='blue' ) bezeichnung1_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.bezeichnung1_sivas = tk.StringVar() self.bezeichnung1_entry = ttk.Entry(frame, textvariable=self.bezeichnung1_sivas, width=AllFrames.get_entry_text_width(self), state="readonly") self.bezeichnung1_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.bezeichnung1_neu = tk.StringVar() self.bezeichnung1_neu.trace_add('write', callback=self.trace_bezeichnung_neu) self.bezeichnung1_neu_entry = ttk.Entry(frame, textvariable=self.bezeichnung1_neu, width=AllFrames.get_entry_text_width(self)) self.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, state="readonly", width=AllFrames.get_entry_text_width(self)) 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 trace_bezeichnung_neu(self, var, index, mode): """ Spezial: Bei zu langem Eintrag die Farbe des Textes auffällig machen """ text = self.bezeichnung1_neu.get() if len(text) < 45: self.bezeichnung1_neu_entry.configure(foreground='black') self._controller.set_gui_data("bezeichnung1_neu", text) elif len(text) < 51: self.bezeichnung1_neu_entry.configure(foreground='orange') else: self.bezeichnung1_neu_entry.configure(foreground='red') def get_data(self): return { "bezeichnung1_sivas": self.bezeichnung1_sivas.get(), "bezeichnung1_neu": self.bezeichnung1_neu.get(), "bezeichnung2_sivas": self.bezeichnung2_sivas.get(), } def data_from_model(self): self.clear() 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"]) def set_states(self): data = self.get_controller().get_gui_states() if 'bezeichnung1_sivas' in data: self.bezeichnung1_sivas['state'] = data["bezeichnung1_sivas"] if 'bezeichnung1_neu' in data: self.bezeichnung1_neu['state'] = data["bezeichnung1_neu"] if 'bezeichnung2_sivas' in data: self.bezeichnung2_sivas['state'] = data["bezeichnung2_sivas"] def clear(self): self.bezeichnung1_sivas.set('') self.bezeichnung1_neu.set('') self.bezeichnung2_sivas.set('') class RightFrameHalbzeugOhneS(AllFrames): def __init__(self, frame, nrow=0): 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 # 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:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) halbzeugOhneSaege_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeugOhneSaege_neu = tk.StringVar() self.halbzeugOhneSaege_neu_combo = ttk.Combobox(frame, textvariable=self.halbzeugOhneSaege_neu, width=AllFrames.get_combo_width(self)) self.halbzeugOhneSaege_neu_combo['values'] = ['ja','nein'] self.halbzeugOhneSaege_neu_combo['state'] = 'readonly' self.halbzeugOhneSaege_neu_combo.bind('<>', lambda event:self.callback('cb_halbzeugOhneSaege_neu', self.halbzeugOhneSaege_neu.get())) self.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:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) ruestcode_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.ruestcode_neu = tk.StringVar() self.ruestcode_neu_combo = ttk.Combobox(frame, textvariable=self.ruestcode_neu, width=AllFrames.get_combo_width(self)) #self.ruestcode_neu_combo['values'] = ruestcodes self.ruestcode_neu_combo['state'] = 'readonly' self.ruestcode_neu_combo.bind('<>', lambda event:self.callback('cb_ruestcode_neu', self.ruestcode_neu.get())) self.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:", foreground='steel blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) fertigungsart_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.fertigungsart_neu = tk.StringVar() self.fertigungsart_neu_combo = ttk.Combobox(frame, textvariable=self.fertigungsart_neu, width=AllFrames.get_combo_width(self)) #self.fertigungsart_neu_combo['values'] = categories self.fertigungsart_neu_combo['state'] = 'readonly' self.fertigungsart_neu_combo.bind('<>', lambda event:self.callback('cb_fertigungsart_neu', self.fertigungsart_neu.get())) self.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:", foreground='steel blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) allgemeintoleranz_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.allgemeintoleranz_neu = tk.StringVar() self.allgemeintoleranz_neu_combo = ttk.Combobox(frame, textvariable=self.allgemeintoleranz_neu, width=AllFrames.get_combo_width(self)) #self.allgemeintoleranz_neu_combo['values'] = categories self.allgemeintoleranz_neu_combo['state'] = 'readonly' self.allgemeintoleranz_neu_combo.bind('<>', lambda event:self.callback('cb_allgemeintoleranz_neu', self.allgemeintoleranz_neu.get())) self.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:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) fosGruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.fosGruppe_neu = tk.StringVar() self.fosGruppe_neu_combo = ttk.Combobox(frame, textvariable=self.fosGruppe_neu, width=AllFrames.get_combo_width(self)) #self.fosGruppe_neu_combo['values'] = categories self.fosGruppe_neu_combo['state'] = 'readonly' self.fosGruppe_neu_combo.bind('<>', lambda event:self.callback('cb_fosGruppe_neu', self.fosGruppe_neu.get())) self.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:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) kalkulationsart_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.kalkulationsart_neu = tk.StringVar() self.kalkulationsart_neu_combo = ttk.Combobox(frame, textvariable=self.kalkulationsart_neu, width=AllFrames.get_combo_width(self)) #self.kalkulationsart_neu_combo['values'] = categories self.kalkulationsart_neu_combo['state'] = 'readonly' self.kalkulationsart_neu_combo.bind('<>', lambda event:self.callback('cb_kalkulationsart_neu', self.kalkulationsart_neu.get())) self.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(), # ab hier die Dropdowns der Oberfläche auslesen "cb_halbzeugOhneSaege_neu" :self.halbzeugOhneSaege_neu_combo['values'], "cb_ruestcode_neu" :self.ruestcode_neu_combo['values'], "cb_fertigungsart_neu" :self.fertigungsart_neu_combo['values'], "cb_allgemeintoleranz_neu" :self.allgemeintoleranz_neu_combo['values'], "cb_fosGruppe_neu" :self.fosGruppe_neu_combo['values'], "cb_kalkulationsart_neu" :self.kalkulationsart_neu_combo['values'] } def data_from_model(self): self.clear() 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"]) # ab hier die Dropdowns der Oberfläche befüllen. if 'cb_halbzeugOhneSaege_neu' in data: self.halbzeugOhneSaege_neu_combo['values'] = data['cb_halbzeugOhneSaege_neu'] if 'cb_ruestcode_neu' in data: self.ruestcode_neu_combo['values'] = data['cb_ruestcode_neu'] if 'cb_fertigungsart_neu' in data: self.fertigungsart_neu_combo['values'] = data['cb_fertigungsart_neu'] if 'cb_allgemeintoleranz_neu' in data: self.allgemeintoleranz_neu_combo['values'] = data['cb_allgemeintoleranz_neu'] if 'cb_fosGruppe_neu' in data: self.fosGruppe_neu_combo['values'] = data['cb_fosGruppe_neu'] if 'cb_kalkulationsart_neu' in data: self.kalkulationsart_neu_combo['values'] = data['cb_kalkulationsart_neu'] def set_states(self): data = self.get_controller().get_gui_states() if 'halbzeugOhneSaege_sivas' in data: self.halbzeugOhneSaege_sivas['state'] = data["halbzeugOhneSaege_sivas"] if 'halbzeugOhneSaege_neu' in data: self.halbzeugOhneSaege_neu['state'] = data["halbzeugOhneSaege_neu"] if 'ruestcode_sivas' in data: self.ruestcode_sivas['state'] = data["ruestcode_sivas"] if 'ruestcode_neu' in data: self.ruestcode_neu['state'] = data["ruestcode_neu"] if 'fertigungsart_sivas' in data: self.fertigungsart_sivas['state'] = data["fertigungsart_sivas"] if 'fertigungsart_neu' in data: self.fertigungsart_neu['state'] = data["fertigungsart_neu"] if 'allgemeintoleranz_sivas' in data: self.allgemeintoleranz_sivas['state'] = data["allgemeintoleranz_sivas"] if 'allgemeintoleranz_neu' in data: self.allgemeintoleranz_neu['state'] = data["allgemeintoleranz_neu"] if 'fosGruppe_sivas' in data: self.fosGruppe_sivas['state'] = data["fosGruppe_sivas"] if 'fosGruppe_neu' in data: self.fosGruppe_neu['state'] = data["fosGruppe_neu"] if 'kalkulationsart_sivas' in data: self.kalkulationsart_sivas['state'] = data["kalkulationsart_sivas"] if 'kalkulationsart_neu' in data: self.kalkulationsart_neu['state'] = data["kalkulationsart_neu"] # ab hier die Dropdowns der Oberfläche befüllen. if 'cb_halbzeugOhneSaege_neu' in data: self.halbzeugOhneSaege_neu_combo['state'] = data['cb_halbzeugOhneSaege_neu'] if 'cb_ruestcode_neu' in data: self.ruestcode_neu_combo['state'] = data['cb_ruestcode_neu'] if 'cb_fertigungsart_neu' in data: self.fertigungsart_neu_combo['state'] = data['cb_fertigungsart_neu'] if 'cb_allgemeintoleranz_neu' in data: self.allgemeintoleranz_neu_combo['state'] = data['cb_allgemeintoleranz_neu'] if 'cb_fosGruppe_neu' in data: self.fosGruppe_neu_combo['state'] = data['cb_fosGruppe_neu'] if 'cb_kalkulationsart_neu' in data: self.kalkulationsart_neu_combo['state'] = data['cb_kalkulationsart_neu'] def clear(self): self.halbzeugOhneSaege_sivas.set('') self.halbzeugOhneSaege_neu.set('') self.ruestcode_sivas.set('') self.ruestcode_neu.set('') self.fertigungsart_sivas.set('') self.fertigungsart_neu.set('') self.allgemeintoleranz_sivas.set('') self.allgemeintoleranz_neu.set('') self.fosGruppe_sivas.set('') self.fosGruppe_neu.set('') self.kalkulationsart_sivas.set('') self.kalkulationsart_neu.set('') self.halbzeugOhneSaege_neu_combo['values'] = '' self.ruestcode_neu_combo['values'] = '' self.fertigungsart_neu_combo['values'] = '' self.allgemeintoleranz_neu_combo['values'] = '' self.fosGruppe_neu_combo['values'] = '' self.kalkulationsart_neu_combo['values'] = '' class RightFrameBeschaffungsart(AllFrames): def __init__(self, frame, nrow=0): 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 # Beschaffungsart beschaffungsart_label = ttk.Label(frame, text="Beschaffungsart:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) beschaffungsart_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.beschaffungsart_neu = tk.StringVar() self.beschaffungsart_combo = ttk.Combobox(frame, textvariable=self.beschaffungsart_neu, width=AllFrames.get_combo_width(self)) #self.beschaffungsart_combo['values'] = categories self.beschaffungsart_combo['state'] = 'readonly' self.beschaffungsart_combo.bind('<>', lambda event:self.callback('cb_beschaffungsart_neu', self.beschaffungsart_neu.get())) self.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:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) mengeneinheit_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.mengeneinheit_neu = tk.StringVar() self.mengeneinheit_combo = ttk.Combobox(frame, textvariable=self.mengeneinheit_neu, width=AllFrames.get_combo_width(self)) #self.mengeneinheit_combo['values'] = categories self.mengeneinheit_combo['state'] = 'readonly' self.mengeneinheit_combo.bind('<>', lambda event:self.callback('cb_mengeneinheit_neu', self.mengeneinheit_neu.get())) self.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:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) halbzeug_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.halbzeug_neu = tk.StringVar() self.halbzeug_combo = ttk.Combobox(frame, textvariable=self.halbzeug_neu, width=AllFrames.get_combo_width(self)) self.halbzeug_combo['values'] = ['ja','nein'] self.halbzeug_combo['state'] = 'readonly' self.halbzeug_combo.bind('<>', lambda event:self.callback('cb_halbzeug_neu', self.halbzeug_neu.get())) self.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(), # ab hier die Dropdowns der Oberfläche auslesen. "cb_beschaffungsart_neu": self.beschaffungsart_combo['values'], "cb_mengeneinheit_neu": self.mengeneinheit_combo['values'], "cb_halbzeug_neu": self.halbzeug_combo['values'], } def data_from_model(self): self.clear() 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"]) # ab hier die Dropdowns der Oberfläche befüllen. if "cb_beschaffungsart_neu" in data: self.beschaffungsart_combo['values'] = data["cb_beschaffungsart_neu"] if "cb_mengeneinheit_neu" in data: self.mengeneinheit_combo['values'] = data["cb_mengeneinheit_neu"] if "cb_halbzeug_neu" in data: self.halbzeug_combo['values'] = data["cb_halbzeug_neu"] def set_states(self): data = self.get_controller().get_gui_states() if "beschaffungsart_sivas" in data: self.beschaffungsart_sivas['state'] = data["beschaffungsart_sivas"] if "beschaffungsart_neu" in data: self.beschaffungsart_neu['state'] = data["beschaffungsart_neu"] if "mengeneinheit_sivas" in data: self.mengeneinheit_sivas['state'] = data["mengeneinheit_sivas"] if "mengeneinheit_neu" in data: self.mengeneinheit_neu['state'] = data["mengeneinheit_neu"] if "halbzeug_sivas" in data: self.halbzeug_sivas['state'] = data["halbzeug_sivas"] if "halbzeug_neu" in data: self.halbzeug_neu['state'] = data["halbzeug_neu"] # ab hier die Dropdowns der Oberfläche befüllen. if "cb_beschaffungsart_neu" in data: self.beschaffungsart_combo['state'] = data["cb_beschaffungsart_neu"] if "cb_mengeneinheit_neu" in data: self.mengeneinheit_combo['state'] = data["cb_mengeneinheit_neu"] if "cb_halbzeug_neu" in data: self.halbzeug_combo['state'] = data["cb_halbzeug_neu"] def clear(self): self.beschaffungsart_sivas.set('') self.beschaffungsart_neu.set('') self.mengeneinheit_sivas.set('') self.mengeneinheit_neu.set('') self.halbzeug_sivas.set('') self.halbzeug_neu.set('') self.beschaffungsart_combo['values'] = '' self.mengeneinheit_combo['values'] = '' self.halbzeug_combo['values'] = '' class RightFrameTOSGruppe(AllFrames): def __init__(self, frame, nrow=0): 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 # TOS-Gruppe tosgruppe_label = ttk.Label(frame, text="TOS-Gruppe:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) 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, width=AllFrames.get_entry_text_width(self)) 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:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) dispogruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.dispogruppe_neu = tk.StringVar() self.dispogruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispogruppe_neu, width=AllFrames.get_combo_width(self)) #self.dispogruppe_neu_combo['values'] = categories self.dispogruppe_neu_combo['state'] = 'readonly' self.dispogruppe_neu_combo.bind('<>', lambda event:self.callback('cb_dispogruppe_neu', self.dispogruppe_neu.get())) self.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:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) dispolaufgruppe_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.dispolaufgruppe_neu = tk.StringVar() self.dispolaufgruppe_neu_combo = ttk.Combobox(frame, textvariable=self.dispolaufgruppe_neu, width=AllFrames.get_combo_width(self)) #self.dispolaufgruppe_neu_combo['values'] = categories self.dispolaufgruppe_neu_combo['state'] = 'readonly' self.dispolaufgruppe_neu_combo.bind('<>', lambda event:self.callback('cb_dispolaufgruppe_neu', self.dispolaufgruppe_neu.get())) self.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, state="readonly", width=AllFrames.get_entry_text_width(self)) 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, width=AllFrames.get_entry_text_width(self)) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) 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, width=AllFrames.get_entry_text_width(self)) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) hersteller_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.hersteller_neu = tk.StringVar() a = self.hersteller_neu.get() self.hersteller_neu_combo = ttk.Combobox(frame, textvariable=self.hersteller_neu, width=AllFrames.get_combo_width(self)) self.hersteller_neu_combo['state'] = 'readonly' self.hersteller_neu_combo.bind('<>', lambda event:self.callback('cb_hersteller_neu', self.hersteller_neu.get())) self.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() self.herstteilenr_sivas_entry = ttk.Entry(frame, textvariable=self.herstteilenr_sivas, state="readonly", width=AllFrames.get_entry_text_width(self)) self.herstteilenr_sivas_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.herstteilenr_neu = tk.StringVar() self.herstteilenr_neu_entry = ttk.Entry(frame, textvariable=self.herstteilenr_neu, width=AllFrames.get_entry_text_width(self)) self.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(), # ab hier die Dropdowns der Oberfläche auslesen. "cb_dispogruppe_neu": self.dispogruppe_neu_combo['values'], "cb_dispolaufgruppe_neu": self.dispolaufgruppe_neu_combo['values'], "cb_hersteller_neu": self.hersteller_neu_combo['values'], } def data_from_model(self): self.clear() 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"]) # ab hier die Dropdowns der Oberfläche befüllen. if "cb_dispogruppe_neu" in data: self.dispogruppe_neu_combo['values'] = data["cb_dispogruppe_neu"] if "cb_dispolaufgruppe_neu" in data: self.dispolaufgruppe_neu_combo['values'] = data["cb_dispolaufgruppe_neu"] if "cb_hersteller_neu" in data: self.hersteller_neu_combo['values'] = data["cb_hersteller_neu"] def set_states(self): data = self.get_controller().get_gui_states() if 'tosgruppe_sivas' in data: self.tosgruppe_sivas['state'] = data["tosgruppe_sivas"] if 'tosgruppe_neu' in data: self.tosgruppe_neu['state'] = data["tosgruppe_neu"] if 'dispogruppe_sivas' in data: self.dispogruppe_sivas['state'] = data["dispogruppe_sivas"] if 'dispogruppe_neu' in data: self.dispogruppe_neu['state'] = data["dispogruppe_neu"] if 'dispolaufgruppe_sivas' in data: self.dispolaufgruppe_sivas['state'] = data["dispolaufgruppe_sivas"] if 'dispolaufgruppe_neu' in data: self.dispolaufgruppe_neu['state'] = data["dispolaufgruppe_neu"] if 'ersatzfuer_sivas' in data: self.ersatzfuer_sivas['state'] = data["ersatzfuer_sivas"] if 'ersatzfuer_neu' in data: self.ersatzfuer_neu['state'] = data["ersatzfuer_neu"] if 'ersetztdurch_sivas' in data: self.ersetztdurch_sivas['state'] = data["ersetztdurch_sivas"] if 'ersetztdurch_neu' in data: self.ersetztdurch_neu['state'] = data["ersetztdurch_neu"] if 'hersteller_sivas' in data: self.hersteller_sivas['state'] = data["hersteller_sivas"] if 'hersteller_neu' in data: self.hersteller_neu['state'] = data["hersteller_neu"] if 'herstteilenr_sivas' in data: self.herstteilenr_sivas_entry['state'] = data["herstteilenr_sivas"] if 'herstteilenr_neu' in data: self.herstteilenr_neu_entry['state'] = data["herstteilenr_neu"] # ab hier die Dropdowns der Oberfläche befüllen. if "cb_dispogruppe_neu" in data: self.dispogruppe_neu_combo['state'] = data["cb_dispogruppe_neu"] if "cb_dispolaufgruppe_neu" in data: self.dispolaufgruppe_neu_combo['state'] = data["cb_dispolaufgruppe_neu"] if "cb_hersteller_neu" in data: self.hersteller_neu_combo['state'] = data["cb_hersteller_neu"] def clear(self): self.tosgruppe_sivas.set('') self.tosgruppe_neu.set('') self.dispogruppe_sivas.set('') self.dispogruppe_neu.set('') self.dispolaufgruppe_sivas.set('') self.dispolaufgruppe_neu.set('') self.ersatzfuer_sivas.set('') self.ersatzfuer_neu.set('') self.ersetztdurch_sivas.set('') self.ersetztdurch_neu.set('') self.hersteller_sivas.set('') self.hersteller_neu.set('') self.herstteilenr_sivas.set('') self.herstteilenr_neu.set('') self.dispogruppe_neu_combo['values'] = '' self.dispolaufgruppe_neu_combo['values'] = '' self.hersteller_neu_combo['values'] = '' class RightFrameWerkstoffdiskrepanz(AllFrames): def __init__(self, frame, nrow=0): 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 # 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.werkstoffdiskr_neu= tk.BooleanVar() self.werkstoffdiskr_checkbutton = ttk.Checkbutton(frame, #text='ja', variable=self.werkstoffdiskr_neu, command=lambda: self.callback("cb_werkstoffdiskrepanz", self.werkstoffdiskr_neu.get()), onvalue=True, offvalue=False) self.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:", foreground='steel blue' ) werkstofftyp_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.werkstofftyp_neu = tk.StringVar() self.werkstofftyp_neu_combo = ttk.Combobox(frame, textvariable=self.werkstofftyp_neu, width=AllFrames.get_combo_width(self)) # self.werkstofftyp_neu_combo['values'] = wnamen self.werkstofftyp_neu_combo['state'] = 'readonly' self.werkstofftyp_neu_combo.bind('<>', lambda event:self.callback('cb_werkstofftyp_neu', self.werkstofftyp_neu.get())) self.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:", foreground='steel blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) material_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.material_neu = tk.StringVar() self.material_neu_combo = ttk.Combobox(frame, textvariable=self.material_neu, width=AllFrames.get_combo_width(self)) self.material_neu_combo['state'] = 'readonly' self.material_neu_combo.bind('<>', lambda event:self.callback('cb_material_neu', self.material_neu.get())) self.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:", foreground='steel blue' ) oberflaeche_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.oberflaeche_neu = tk.StringVar() self.oberflaeche_neu_combo = ttk.Combobox(frame, textvariable=self.oberflaeche_neu, width=AllFrames.get_combo_width(self)) self.oberflaeche_neu_combo['state'] = 'readonly' self.oberflaeche_neu_combo.bind('<>', lambda event:self.callback('cb_oberflaeche_neu', self.oberflaeche_neu.get())) self.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:", foreground='steel blue' ) farbe_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.farbe_neu = tk.StringVar() self.farbe_neu_combo = ttk.Combobox(frame, textvariable=self.farbe_neu, width=AllFrames.get_combo_width(self)) self.farbe_neu_combo['state'] = 'readonly' self.farbe_neu_combo.bind('<>', lambda event:self.callback('cb_farbe_neu', self.farbe_neu.get())) self.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_neu": self.werkstoffdiskr_neu.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(), # ab hier die Dropdowns der Oberfläche "cb_werkstofftyp_neu": self.werkstofftyp_neu_combo['values'], "cb_material_neu": self.material_neu_combo['values'], "cb_oberflaeche_neu": self.oberflaeche_neu_combo['values'], "cb_farbe_neu": self.farbe_neu_combo['values'], } def data_from_model(self): self.clear() data = self.get_controller().get_all_gui_data() if 'werkstoffdiskr_neu' in data: self.werkstoffdiskr_neu.set(data["werkstoffdiskr_neu"]) 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"]) # ab hier die Dropdowns der Oberfläche befüllen. if 'cb_werkstofftyp_neu' in data: self.werkstofftyp_neu_combo['values'] = data["cb_werkstofftyp_neu"] if 'cb_material_neu' in data: self.material_neu_combo['values'] = data["cb_material_neu"] if 'cb_oberflaeche_neu' in data: self.oberflaeche_neu_combo['values'] = data["cb_oberflaeche_neu"] if 'cb_farbe_neu' in data: self.farbe_neu_combo['values'] = data["cb_farbe_neu"] def set_states(self): data = self.get_controller().get_gui_states() if 'werkstoffdiskr_neu' in data: self.werkstoffdiskr_checkbutton['state'] = data["werkstoffdiskr_neu"] if 'werkstofftyp_neu' in data: self.werkstofftyp_neu['state'] = data["werkstofftyp_neu"] if 'material_sivas' in data: self.material_sivas['state'] = data["material_sivas"] if 'material_neu' in data: self.material_neu['state'] = data["material_neu"] if 'oberflaeche_neu' in data: self.oberflaeche_neu['state'] = data["oberflaeche_neu"] if 'farbe_neu' in data: self.farbe_neu['state'] = data["farbe_neu"] # ab hier die Dropdowns der Oberfläche befüllen. if 'cb_werkstofftyp_neu' in data: self.werkstofftyp_neu_combo['state'] = data["cb_werkstofftyp_neu"] if 'cb_material_neu' in data: self.material_neu_combo['state'] = data["cb_material_neu"] if 'cb_oberflaeche_neu' in data: self.oberflaeche_neu_combo['state'] = data["cb_oberflaeche_neu"] if 'cb_farbe_neu' in data: self.farbe_neu_combo['state'] = data["cb_farbe_neu"] def clear(self): self.werkstoffdiskr_neu.set(False) self.werkstofftyp_neu.set('') self.material_sivas.set('') self.material_neu.set('') self.oberflaeche_neu.set('') self.farbe_neu.set('') self.werkstofftyp_neu_combo['values'] = '' self.material_neu_combo['values'] = '' self.oberflaeche_neu_combo['values'] = '' self.farbe_neu_combo['values'] = '' class RightFrameVersion(AllFrames): def __init__(self, frame, nrow=0): 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 # 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, state="readonly", width=AllFrames.get_entry_text_width(self)) version_entry.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.rownum += 1 # Änderungsindex aenderungsindex_label = ttk.Label(frame, text="Änderungsindex:", foreground='blue' ) 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, state="readonly", width=AllFrames.get_entry_text_width(self)) 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, width=AllFrames.get_entry_text_width(self)) 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:", foreground='blue' ) aenderungstext_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.aenderungstext_sivas = tk.Text(frame, height=3, width=AllFrames.get_text_width(self), font=("Calibri",10)) self.aenderungstext_sivas.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.aenderungstext_neu = tk.Text(frame, height=3, width=AllFrames.get_text_width(self), font=("Calibri",10)) self.aenderungstext_neu.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:", foreground='blue' ) freigabevermerk_label.grid(column=col_left, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.freigabevermerk_sivas = tk.Text(frame, height=3, width=AllFrames.get_text_width(self), font=("Calibri",10)) self.freigabevermerk_sivas.grid(column=col_left+1, row=self.rownum, sticky=tk.W, padx=3, pady=3) self.freigabevermerk_neu = tk.Text(frame,height=3, width=AllFrames.get_text_width(self), font=("Calibri",10) ) self.freigabevermerk_neu.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(), "aenderungsindex_sivas": self.aenderungsindex_sivas.get(), "aenderungsindex_neu": self.aenderungsindex_neu.get(), "aenderungstext_sivas": self.aenderungstext_sivas.get('1.0', 'end'), "aenderungstext_neu": self.aenderungstext_neu.get('1.0', 'end'), "freigabevermerk_sivas": self.freigabevermerk_sivas.get('1.0', 'end'), "freigabevermerk_neu": self.freigabevermerk_neu.get('1.0', 'end'), } def data_from_model(self): self.clear() data = self.get_controller().get_all_gui_data() if 'version_sivas' in data: self.version_sivas.set(data["version_sivas"]) 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: text = data["aenderungstext_sivas"] if text: self.aenderungstext_sivas.insert('1.0', text) if 'aenderungstext_neu' in data: text = data["aenderungstext_neu"] if text: self.aenderungstext_neu.insert('1.0', text) if 'freigabevermerk_sivas' in data: text = data["freigabevermerk_sivas"] if text: self.freigabevermerk_sivas.insert('1.0', text) if 'freigabevermerk_neu' in data: text = data["freigabevermerk_neu"] if text: self.freigabevermerk_neu.insert('1.0', text) def set_states(self): data = self.get_controller().get_gui_states() if 'version_sivas' in data: self.version_sivas['state'] = data["version_sivas"] if 'aenderungsindex_sivas' in data: self.aenderungsindex_sivas['state'] = data["aenderungsindex_sivas"] if 'aenderungsindex_neu' in data: self.aenderungsindex_neu['state'] = data["aenderungsindex_neu"] if 'aenderungstext_sivas' in data: self.aenderungstext_sivas['state'] = data["aenderungstext_sivas"] if 'aenderungstext_neu' in data: self.aenderungstext_neu['state'] = data["freigabevermerk_neu"] if 'freigabevermerk_sivas' in data: self.freigabevermerk_sivas['state'] = data["freigabevermerk_neu"] if 'freigabevermerk_neu' in data: self.freigabevermerk_neu['state'] = data["freigabevermerk_neu"] def clear(self): self.version_sivas.set('') self.aenderungsindex_sivas.set('') self.aenderungsindex_neu.set('') self.aenderungstext_sivas.delete('1.0', 'end') self.aenderungstext_neu.delete('1.0', 'end') self.freigabevermerk_sivas.delete('1.0', 'end') self.freigabevermerk_neu.delete('1.0', 'end') class RightFrameZusatzinfos(AllFrames): def __init__(self, frame, nrow=0): 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 # 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.Text(frame, height=3, width=AllFrames.get_text_width(self), font=("Calibri",10)) self.zusatzinfos_auto_text.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.Text(frame, height=3, width=AllFrames.get_text_width(self), font=("Calibri",10)) self.zusatzinfos_bendef_text.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", None)) 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", None)) 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", None)) 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('1.0', 'end'), "zusatzinfos_bendef_text": self.zusatzinfos_bendef_text.get('1.0', 'end'), } def data_from_model(self): self.clear() data = self.get_controller().get_all_gui_data() if 'zusatzinfos_auto_text' in data: text = data["zusatzinfos_auto_text"] if text: self.zusatzinfos_auto_text.insert('1.0', text) if 'zusatzinfos_bendef_text' in data: text = data["zusatzinfos_bendef_text"] if text: self.zusatzinfos_bendef_text.insert('1.0', text) def set_states(self): data = self.get_controller().get_gui_states() if 'zusatzinfos_auto_text' in data: self.zusatzinfos_auto_text['state'] = data["zusatzinfos_auto_text"] if 'zusatzinfos_bendef_text' in data: self.zusatzinfos_bendef_text['state'] = data["zusatzinfos_bendef_text"] def clear(self): self.zusatzinfos_auto_text.delete('1.0', 'end') self.zusatzinfos_bendef_text.delete('1.0', 'end') class App(): def __init__(self, root): """Standardgui mit Baum zur Anwahl der Teile des Assemblies""" self._root = root self.build_widgets() def build_widgets(self): """ 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(self._root) self._canvas = tk.Canvas(container, width=950, height=900) # canvas = tk.Canvas(container) # baue eine globale Scrollbar ganz rechts vscrollbar = ttk.Scrollbar(container, orient='vertical', command=self._canvas.yview) # verknüpfe Scrollbar und Canvas self._canvas.bind( '', lambda e: self._canvas.configure( scrollregion=self._canvas.bbox("all") ) ) self._canvas.configure(yscrollcommand=vscrollbar.set) #self._root.grid_columnconfigure(0, weight=0) inner_frame = ttk.Frame(self._canvas) self._canvas.create_window((0, 0), window=inner_frame, anchor="nw") # Canvas-Größe anpassen self._canvas.update_idletasks() self._canvas.config(scrollregion=self._canvas.bbox("all")) container.pack() self._canvas.pack(side="left", fill="both", expand=True) vscrollbar.pack(side="right", fill="y", expand=False) # 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) left_frame.pack(side='left', expand=False) # 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) right_frame.pack(side='left', expand=True) # self._canvas.columnconfigure(0, weight=1) # self._canvas.columnconfigure(1, weight=6) # left_frame.columnconfigure(0, weight=1) # right_frame.columnconfigure(0, weight=6) self.lf1 = LeftFrameAsm(left_frame, 0) nrows = self.lf1.get_rows() self.lf2 = TreeView(left_frame, nrows) self.rf1 = RightFrameLabels(right_frame, 0) nrows = self.rf1.get_rows() self.rf2 = RightFramePDM(right_frame, nrows) nrows = self.rf2.get_rows() self.rf3 = RightFrameBezeichnung(right_frame, nrows) nrows = self.rf3.get_rows() self.rf4 = RightFrameHalbzeugOhneS(right_frame, nrows) nrows = self.rf4.get_rows() self.rf5 = RightFrameBeschaffungsart(right_frame, nrows) nrows = self.rf5.get_rows() self.rf6 = RightFrameTOSGruppe(right_frame, nrows) nrows = self.rf6.get_rows() self.rf7 = RightFrameWerkstoffdiskrepanz(right_frame, nrows) nrows = self.rf7.get_rows() self.rf8 = RightFrameVersion(right_frame, nrows) nrows = self.rf8.get_rows() self.rf9 = RightFrameZusatzinfos(right_frame, nrows) 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 clear_leftframes(self): self.lf1.clear() self.lf2.clear() def clear_rightframes(self): self.rf1.clear() self.rf2.clear() self.rf3.clear() self.rf4.clear() self.rf5.clear() self.rf6.clear() self.rf7.clear() self.rf8.clear() self.rf9.clear() def clear(self): self.clear_rightframes() self.clear_leftframes() def set_states(self): # not used. So not implemented: #self.lf1.set_states() #self.lf2.set_states() self.rf1.set_states() self.rf2.set_states() self.rf3.set_states() self.rf4.set_states() self.rf5.set_states() self.rf6.set_states() self.rf7.set_states() self.rf8.set_states() self.rf9.set_states() def data_from_view(self, key=None): ret = dict() ret.update(self.lf1.get_data()) #self.lf2.get_data() tree hat kein get_data ret.update(self.rf1.get_data()) ret.update(self.rf2.get_data()) ret.update(self.rf3.get_data()) ret.update(self.rf4.get_data()) ret.update(self.rf5.get_data()) ret.update(self.rf6.get_data()) ret.update(self.rf7.get_data()) ret.update(self.rf8.get_data()) ret.update(self.rf9.get_data()) if key: return ret[key] else: return ret 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" def suche_3d(self): """create a new window with the file search dialog""" toplevel = tk.Toplevel() toplevel.title("search Window") selected = filename = filedialog.askopenfilename( parent=toplevel, initialdir= os.getcwd(), title="please select .par or .asm file", filetypes=[("Part-Dokumente", ".par"), ("Assembly-Dokumente", ".asm")] ) toplevel.destroy() return selected 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-- """