Treeview mit Hiearchy zur Tabellenerzeugung
Verfasst: Freitag 15. September 2017, 19:27
Hallo, ich versuche eine Tabelle zu erzeugen, welche zunächst Hauptzeilen erzeugt, die dann über das Pluszeichen Datenzeilen erzeugen. Die Datenzeilen sind immer den Hauptzeilen zugehörig und es können beliebig viele Datenzeilen zu jeder Hauptzeile zugeordnet sein.
Ich hatte mich entschieden, zunächst über plumpe Entrys mit Button_commands ein Dictionary zu füllen. Das dictionary self.data wird in der Klasse initialisiert. Dann werden die Daten von einer anderen Klassen gesendet und so eingefügt.
Wie gesagt würde ich gern das Ganze über ein Dictionary machen. Das soll dann als Vorlage für die Tabellenerzeugung dienen. Dazu gibt es dann die Methode self.build_table. Die Referenz self.sub_value wird über eine Selction der Treeview-Tabelle gemacht. Die Referenz val_height sind gesendete Daten, welche ich als keys und als value verwende.
Damit wird nun ein Dictionary erzeugt, welches die folgende Form mit Beispielwerte besitzt: {'1':{'2':{'2':'2'},'3':{'3':'3'}}}
Aus meiner Sicht ist die Staffelung notwendig, da die erste Referenz (hier mit 1 bezeichnet) die ID der Hauptzeile bedeutet. Die zweite Referenz bedeutet die ID der Datenzeile und dort sind dann die Values der Treeviewtabelle gespeichert.
Folgendermaßen lasse ich die Tabelle erzeugen.
Also die Tabelle wird immer gelöscht und neu aufgebaut. Eben so, wie das Dictionary aufgebaut ist. Mein Problem ist nun beim Löschen von Zeilen. Ich weiß nicht, wie ich beim Selectieren der Zeile, das Dictionary updaten kann. Es wird nur die ID der jeweiligen Zeile ausgegeben. Aber ich benötige die ID der Hauptzeile ebenfalls , damit in der Ansteurung des Dictionary auch in der richtigen Hauptzeile gelöscht werden kann. Kennt sich jemand mit Treeview besser aus?
Ich hatte mich entschieden, zunächst über plumpe Entrys mit Button_commands ein Dictionary zu füllen. Das dictionary self.data wird in der Klasse initialisiert. Dann werden die Daten von einer anderen Klassen gesendet und so eingefügt.
Code: Alles auswählen
def add_main_line(self,name_line):
if not name_line in self.data:
self.data[name_line] = {}
self.build_table()
def add_sub_line(self,val_height):
if not val_height in self.data[self.sub_value]:
self.data[self.sub_value][val_height] = {}
self.data[self.sub_value][val_height][val_height] = val_height
self.data[self.sub_value][val_height]['width'] = self.default_setting.get('width')
self.data[self.sub_value][val_height]['remark'] = self.default_setting.get('remark')
self.build_table()
Damit wird nun ein Dictionary erzeugt, welches die folgende Form mit Beispielwerte besitzt: {'1':{'2':{'2':'2'},'3':{'3':'3'}}}
Aus meiner Sicht ist die Staffelung notwendig, da die erste Referenz (hier mit 1 bezeichnet) die ID der Hauptzeile bedeutet. Die zweite Referenz bedeutet die ID der Datenzeile und dort sind dann die Values der Treeviewtabelle gespeichert.
Folgendermaßen lasse ich die Tabelle erzeugen.
Code: Alles auswählen
def rebuild_table(self):
for child in self.container.treeview.get_children():
self.container.treeview.delete(child)
count_A = 0
count_B = 0
for row,key in enumerate(sorted(self.data.keys(),key=lambda x: int(x))):
self.iid = self.container.treeview.insert('', count_A, text=(str(key)))
for rowB,keyB in enumerate(sorted(self.data[key].keys(),key=lambda x: int(x))):
if self.data[key]:
self.container.treeview.insert(self.iid,'end', text=(keyB), values=(self.default_setting.get('width')+" mm", self.default_setting.get('remark')))
count_A += 1