gui um Selectionsbox für Pfad zu 3D Modell ergänzt. callbacks der Knöpfe erfolgt jetzt nur noch im Controller. 3D-Modell Pflichtfeld implementiert
This commit is contained in:
@@ -7,6 +7,7 @@ from controller import Controller
|
||||
from manage_configs import Configs, SivasAssemblyData
|
||||
import argparse
|
||||
import os
|
||||
import json
|
||||
from get_teilestamm import FetchSivasTeilestamm
|
||||
|
||||
|
||||
@@ -117,7 +118,7 @@ if __name__ == '__main__':
|
||||
|
||||
model = CadItem()
|
||||
if args.demo:
|
||||
model.from_json(demo_data)
|
||||
model.from_json(json.loads(demo_data))
|
||||
build_gui(model, configs)
|
||||
|
||||
elif args.sivasid:
|
||||
@@ -133,7 +134,8 @@ if __name__ == '__main__':
|
||||
sivas_teilestamm = FetchSivasTeilestamm(sivasid, data_dir)
|
||||
|
||||
sivas_teilestamm.fetch_from_db(args.uselocal)
|
||||
sivas_teilestamm.get_unmigrated_teilstamm_csvs()
|
||||
if not args.uselocal:
|
||||
sivas_teilestamm.get_unmigrated_teilstamm_csvs()
|
||||
redids = sivas_teilestamm.get_red_ids()
|
||||
sad = SivasAssemblyData(data_dir, filename)
|
||||
parent_children = sad.get_parent_children()
|
||||
|
||||
+37
-27
@@ -1,6 +1,7 @@
|
||||
import json
|
||||
import pandas as pd
|
||||
import os
|
||||
import glob
|
||||
|
||||
class DataModel:
|
||||
def __init__(self):
|
||||
@@ -417,6 +418,9 @@ class GuiLogic():
|
||||
self.call_and_set_data('cb_neuaufbau')
|
||||
self.call_and_set_data('cb_aus_halbzeug_neu')
|
||||
self.call_and_set_data('cb_halbzeugoberflaeche')
|
||||
self.call_and_set_data('cb_lebenszyklus_status_neu')
|
||||
self.call_and_set_data('cb_3Dmodel_neu')
|
||||
|
||||
|
||||
def call_and_set_data(self, callbackfunc):
|
||||
eval('self._model.set_gui_dict(self.'+callbackfunc+'(None))')
|
||||
@@ -474,25 +478,17 @@ class GuiLogic():
|
||||
pass
|
||||
elif key == 'cb_farbe_neu':
|
||||
ret = self.cb_farbe_neu(value)
|
||||
# Aktionen
|
||||
elif key == 'cb_speichern':
|
||||
self._model.save_to_file()
|
||||
pass
|
||||
elif key == 'cb_migrieren':
|
||||
pass
|
||||
elif key == 'cb_zurücksetzen':
|
||||
pass
|
||||
elif key == 'cb_suche_asm':
|
||||
pass
|
||||
else:
|
||||
raise Exception("this callback does not exist "+key)
|
||||
return ret
|
||||
|
||||
def get_dependent(self, key):
|
||||
"""gibt die Namen der Callbacks zurück, welche nach dem Aufruf der ursprünglichen Methode wegen der Abhängigkeiten der Comboboxen anschliessend folgen sollen"""
|
||||
""" gibt die Namen der Callbacks zurück, welche nach dem Aufruf der ursprünglichen Methode
|
||||
wegen der Abhängigkeiten der Comboboxen anschliessend folgen sollen
|
||||
"""
|
||||
ret = list()
|
||||
if key == 'cb_pdm_kategorie_neu':
|
||||
ret = ['cb_neuaufbau', 'cb_aus_halbzeug_neu']
|
||||
ret = ['cb_neuaufbau', 'cb_aus_halbzeug_neu', 'cb_3Dmodel_neu']
|
||||
elif key == 'cb_neuaufbau':
|
||||
ret = []
|
||||
elif key == 'cb_aus_halbzeug_neu':
|
||||
@@ -539,6 +535,7 @@ class GuiLogic():
|
||||
ret = []
|
||||
elif key == 'cb_farbe_neu':
|
||||
ret = []
|
||||
# Aktionen der Knöpfe werden vom Controller verarbeitet
|
||||
elif key == 'cb_speichern':
|
||||
ret = []
|
||||
elif key == 'cb_migrieren':
|
||||
@@ -547,6 +544,8 @@ class GuiLogic():
|
||||
ret = []
|
||||
elif key == 'cb_suche_asm':
|
||||
ret = []
|
||||
elif key == 'cb_3dsuchen':
|
||||
ret = []
|
||||
else:
|
||||
raise Exception("this callback does not exist "+key)
|
||||
return ret
|
||||
@@ -611,7 +610,7 @@ class GuiLogic():
|
||||
ret['lebenszyklus_status_neu'] = lstatus[0]
|
||||
ret['cb_lebenszyklus_status_neu'] = lstatus
|
||||
else:
|
||||
ret['cb_lebenszyklus_status_neu'] = selected
|
||||
ret['lebenszyklus_status_neu'] = selected
|
||||
return ret
|
||||
|
||||
def cb_halbzeugfarbe(self, selected):
|
||||
@@ -646,40 +645,51 @@ class GuiLogic():
|
||||
def cb_3Dmodel_neu(self, selected):
|
||||
ret = dict()
|
||||
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
|
||||
pfad = self._config.Pfade.get('3D-Modelle', 'BaugruppeSchweissbaugruppe')
|
||||
|
||||
pfad = ''
|
||||
if pdm_kategorie_neu == "Baugruppe" or pdm_kategorie_neu == "Schweissbaugruppe":
|
||||
# Defaultwert = \\ssg.local\freigaben\Abteilungen\Entwicklung\CAD\Standards\SolidEdge\Template\DIN Metric\baugruppe.asm
|
||||
pfad = self._config.Pfade.get('3D-Modelle', 'BaugruppeSchweissbaugruppe')
|
||||
ret['cb_3Dmodel_neu'] = [pfad]
|
||||
# Dropdownwerte = keine
|
||||
# state_ComboBox = disabled
|
||||
# state_Button = disabled
|
||||
# ret = {
|
||||
# '': '',
|
||||
# '': '',
|
||||
# }
|
||||
pass
|
||||
elif pdm_kategorie_neu == "Kaufteil":
|
||||
# Defaultwert = \\ssg.local\freigaben\SIVAS_CAD_EDM\Migration\06_3D_Vorlagen\ET_mit_Volumen.par
|
||||
pfad = self._config.Pfade.get('3D-Modelle', 'Kaufteil')
|
||||
ret['cb_3Dmodel_neu'] = [pfad]
|
||||
# Dropdownwerte = keine
|
||||
# state_ComboBox = disabled
|
||||
# state_Button = disabled
|
||||
pass
|
||||
elif pdm_kategorie_neu == "Einzelteil":
|
||||
aus_halbzeug = self._model.get_gui_data("aus_halbzeug_neu")
|
||||
neuaufbau = self._model.get_gui_data("neuaufbau")
|
||||
if aus_halbzeug == "True" or neuaufbau == "True":
|
||||
# Defaultwert = \\ssg.local\freigaben\SIVAS_CAD_EDM\Migration\06_3D_Vorlagen\ET_mit_Volumen.par
|
||||
pfad = self._config.Pfade.get('3D-Modelle', 'Einzelteil')
|
||||
ret['cb_3Dmodel_neu'] = [pfad]
|
||||
# Dropdownwerte = keine
|
||||
# state_ComboBox = disabled
|
||||
# state_Button = disabled
|
||||
pass
|
||||
else:
|
||||
# Defaultwert = ""
|
||||
search_path = self._config.Pfade.get('3D-Modelle', 'EinzelteilDefault')
|
||||
itemid = str(self._model.get_current_item_id())
|
||||
pfade = []
|
||||
for root, dirnames, filenames in os.walk(search_path):
|
||||
pfade.extend(glob.glob(root + "/"+itemid+".par"))
|
||||
for root, dirnames, filenames in os.walk(search_path):
|
||||
pfade.extend(glob.glob(root + "/"+itemid+".asm"))
|
||||
# Dropdownwerte = Dateipfade von allen .par-Dateien, die die aktuelle Teilenummer im Dateinamen aufweisen und sich gleichzeitig in einem der rekursiv durchsuchten Pfade aus der Sektion "3D-Modelle" in "Zielpfade.cfg" befinden.
|
||||
# state_ComboBox = readonly
|
||||
# state_Button = keiner
|
||||
ret['cb_3Dmodel_neu'] = pfade
|
||||
if len(pfade) == 0:
|
||||
pfad ="<id not found>"
|
||||
else:
|
||||
pfad = pfade[0]
|
||||
|
||||
# IF Button "Durchsuchen" geklickt und benutzerdefinierte Solid Edge-Datei gewählt:
|
||||
# Defaultwert = Dateipfad der gewählten Solid Edge-Datei
|
||||
pass
|
||||
if selected is None:
|
||||
ret['model3d_neu'] = pfad
|
||||
else:
|
||||
ret['model3d_neu'] = selected
|
||||
return ret
|
||||
|
||||
|
||||
|
||||
+29
-5
@@ -161,16 +161,40 @@ class Controller(Observer):
|
||||
def callback(self, key, value):
|
||||
if not self._model:
|
||||
raise Exception("no model yet added")
|
||||
|
||||
# Aktionen der Knöpfe
|
||||
if key == 'cb_speichern':
|
||||
self._model.save_to_file()
|
||||
elif key == 'cb_migrieren':
|
||||
pass
|
||||
elif key == 'cb_zurücksetzen':
|
||||
pass
|
||||
elif key == 'cb_suche_asm':
|
||||
pass
|
||||
elif key == 'cb_3dsuchen':
|
||||
self.suche_3d()
|
||||
|
||||
# Logik um neue Werte in Oberfläche oder Modell zu füllen
|
||||
model_values = self._model.callback(key, value)
|
||||
if model_values:
|
||||
self.set_gui_dict(model_values)
|
||||
self.refresh_gui()
|
||||
# callbacks der gui zur
|
||||
else:
|
||||
# Logik um neue Werte in Oberfläche oder Modell zu füllen
|
||||
model_values = self._model.callback(key, value)
|
||||
if model_values:
|
||||
self.set_gui_dict(model_values)
|
||||
self.refresh_gui()
|
||||
|
||||
# gib dem observer Bescheid, was aufgerufen wurde
|
||||
self.notify(self._model, key,value)
|
||||
self.refresh_gui()
|
||||
|
||||
def suche_3d(self):
|
||||
pdm_kategorie_neu = self._model.get_gui_data("pdm_kategorie_neu")
|
||||
aus_halbzeug = self._model.get_gui_data("aus_halbzeug_neu")
|
||||
neuaufbau = self._model.get_gui_data("neuaufbau")
|
||||
# Suche Knopf darf nur bei Einzelteilen funktionieren und wenn Halbzeug/NEuaufbau nicht angehakt sind
|
||||
if pdm_kategorie_neu == "Einzelteil" and aus_halbzeug == "False" or neuaufbau == "False":
|
||||
newpath = self._view.suche_3d()
|
||||
self._model.set_gui_data('model3d_neu', newpath)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+21
-9
@@ -52,6 +52,8 @@ class AllFrames():
|
||||
def set_button_content(self, adict):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
class TreeView():
|
||||
def __init__(self, frame, nrow=0):
|
||||
# a treeview
|
||||
@@ -325,23 +327,21 @@ class RightFramePDM(AllFrames):
|
||||
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)
|
||||
self.model3d_combo['values'] = ['pfad1 Teilenummer in Dateinamen','pfad2 Teilenummer in Dateinamen']
|
||||
self.model3d_combo['state'] = 'readonly'
|
||||
self.model3d_combo.bind('<<ComboboxSelected>>', 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.W, padx=3, pady=3)
|
||||
#toplevel = tk.Toplevel()
|
||||
#toplevel.title("search Window")
|
||||
#filename = filedialog.askopenfilename(
|
||||
# parent=toplevel,
|
||||
# title="Browse File"
|
||||
#)
|
||||
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)
|
||||
suche3d_button = ttk.Button(frame, text="Durchsuchen..", command=lambda: self.callback("cb_3dsuchen", None))
|
||||
suche3d_button.grid(column=col_left+2, row=self.rownum, sticky=tk.EW)
|
||||
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"
|
||||
@@ -1281,7 +1281,19 @@ class App():
|
||||
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__":
|
||||
|
||||
|
||||
Reference in New Issue
Block a user