Hi,
ich beschäftige mich seit einiger Zeit mit wx.python und möchte den Inhalt meiner Messdaten mittels einem Tree darstellen. Jedoch gehen mir so langsam die Ideen aus, wie ich meinen Tree erstelle.
Stand der Dinge:
Die Ausgabe des Pfades aus meiner Datenbank sieht wie folgt aus:
Ein Liste mit:
/Montag
/Montag/aa
/Montag/aa/1
/Montag/aa/1/test
/Montag/aa/2
/Montag/bb
/Montag/bb/1
/Dienstag
/Dienstag/aa
/Dienstag/aa/1
/Diesntag/aa/1/test
/Dienstag/aa/2
/Dienstag/bb
/Dientag/bb/1
Das ist jetzt ein einfachens Beispiel. Es kommen aber alle Kombinationen vor die man sich so denken kann.
Erst habe ich versucht eine Liste zu generieren die so aussieht wie
im Tutorial von Manning. Dazu hab ich die Liste beim "/" gesplittet, so dass ich die Namen direkt ansprechen konnte. Das hat leider bei mir wegen der Komplexität nicht geklappt. Dann habe ich versucht direkt die Äste und Zweige zu implementieren.
Da stoße ich jedoch auf das Problem, dass ich nicht weis wie ich feststellen kann ob der Knoten schon enthalten ist. Da es sich um Messwerte handelt, werden auf jeden fall doppelte Einträge vorkommen
Vielleicht hat jemand einen guten Vorschlag oder einen Lösungsansatz
Vielen Dank
Stefan
Implementierung der Baumstruktur in TreeCtrl
Hoi,
ehrlich gesagt verstehe ich noch nicht einmal das Problem. Und da auch sonst niemand antwortet, könnte das ein allgemeines Phänomen sein.
Was ist denn eigentlich die Frage?
Gruß,
Christian
ehrlich gesagt verstehe ich noch nicht einmal das Problem. Und da auch sonst niemand antwortet, könnte das ein allgemeines Phänomen sein.
Was ist denn eigentlich die Frage?
Gruß,
Christian
Das habe ich mir auch schon gedacht.
Ich hab jetzt auch noch ein wenig weiter gebastelt.
Hier mal der Code wie ich den Tree erstelle.
Mein Problem ist, dass er in der letzten Schleife immer nur einen Item finden darf.
Jedoch zum Beispiel bei ['','Dienstag','a','ab'] das 'a' zweimal in meiner Suchliste findet und beide Knoten hinzufügt. Ich würde aber gerne den richtigen Knoten finden.
Vielleicht ist das jetzt ein bissle genauer.
Danke im Voraus
Stefan
Ich hab jetzt auch noch ein wenig weiter gebastelt.
Hier mal der Code wie ich den Tree erstelle.
Code: Alles auswählen
Name=[['','Montag'],['','Montag','a'],['','Montag','a','ab'],['','Montag','a','ab','abc'],
['','Dienstag'],['','Dienstag','a'],['','Dienstag','a','ab'],['','Dienstag','a','ab','abc']]
"""Baue Knoten der Baumstruktur auf"""
def AddTreeNodes(self,parentItem):
for i in numpy.arange(0,len(Name)-1):
if len(Name[i])==2:
List.append(self.tree.AppendItem(parentItem,Name[i][-1]))
else:
pattern= re.compile(Name[i][-2])
for j,element in enumerate(List):
if pattern.match(self.tree.GetItemText(element)):
List.append(self.tree.AppendItem(List[j],Name[i][-1]))
Jedoch zum Beispiel bei ['','Dienstag','a','ab'] das 'a' zweimal in meiner Suchliste findet und beide Knoten hinzufügt. Ich würde aber gerne den richtigen Knoten finden.
Vielleicht ist das jetzt ein bissle genauer.
Danke im Voraus
Stefan
Jetzt habe ich geschafft meinen Baum zu implementieren, wie ich ihn haben möchte.
Hat jemand vielleicht ein paar Optminierungsvorschläge?
Gruss
Stefan
Hat jemand vielleicht ein paar Optminierungsvorschläge?
Code: Alles auswählen
Name=[['','Montag'],['','Montag','a'],['','Montag','a','ab'],['','Montag','a','ab','abc'],
['','Dienstag'],['','Dienstag','a'],['','Dienstag','a','ab'],['','Dienstag','a','ab','abc']
Test=[]
"""Baue Knoten der Baumstruktur auf"""
def AddTreeNodes(self,parentItem):
for i in numpy.arange(0,len(Name)):
if len(Name[i])==2:
List.append(self.tree.AppendItem(parentItem,Name[i][-1]))
Test.append(Name[i])
else:
pattern= re.compile(Name[i][-2])
for j,element in enumerate(List):
if pattern.match(self.tree.GetItemText(element)):
if Name[i][0:-1]==Test[j]:
List.append(self.tree.AppendItem(List[j],Name[i][-1]))
Test.append(Name[i])
else:
pass
Stefan
Vorschläge doch immer:
- PEP8 anschauen
- in der ersten for-Schleife direkt über die Liste iterieren und die Indizes sparen
- das leere else mit dem pass kannst du sparen
Sebastian
- PEP8 anschauen
- in der ersten for-Schleife direkt über die Liste iterieren und die Indizes sparen
- das leere else mit dem pass kannst du sparen
Sebastian
Das Leben ist wie ein Tennisball.
Stimme Sebastian zu. Und noch meine Vorschläge:
- Sebastian hat schon recht mit dem direkt iterieren, aber falls das mal nicht geht, kannst Du zwar über ein ndarray iterieren, wenn es sowieso besteht, aber es zum iterieren anzulegen ist keine gute Idee: Das kann sehr teuer werden. Besser ist es wohl xrange anstelle von numpy.arange in Zeile 7 zu verwenden. Noch besser: Direkt über die Liste iterieren.
- 'List' ist nicht sonderlich beschreibend. Gib' dem Kind doch den Namen, den es versteht, z. B. 'nodes' oder so.
- In Zeile 19 machst Du einen append-Aufruf in einem append-Aufruf. Das ist mit Sicherheit nicht optimal. Ohne Code drum herum, kann ich aber auch nicht sagen, wie es besser sein sollte.
HTH
Christian
- Sebastian hat schon recht mit dem direkt iterieren, aber falls das mal nicht geht, kannst Du zwar über ein ndarray iterieren, wenn es sowieso besteht, aber es zum iterieren anzulegen ist keine gute Idee: Das kann sehr teuer werden. Besser ist es wohl xrange anstelle von numpy.arange in Zeile 7 zu verwenden. Noch besser: Direkt über die Liste iterieren.
- 'List' ist nicht sonderlich beschreibend. Gib' dem Kind doch den Namen, den es versteht, z. B. 'nodes' oder so.
- In Zeile 19 machst Du einen append-Aufruf in einem append-Aufruf. Das ist mit Sicherheit nicht optimal. Ohne Code drum herum, kann ich aber auch nicht sagen, wie es besser sein sollte.
HTH
Christian