nach einiger Zeit des Mitlesens und passiven Teilhabens habe ich auch einmal eine Frage an euch.
Ich programmiere seit einiger Zeit an meinem ersten "größeren" Programm herum, welches eine Art spezieller Vokabeltrainer ist.
Da ich mich sehr gerne in Sachen einlese und selbst ausprobiere habe ich das komplette Programm mit wxpython geschrieben und mich anhand der Dokumentation durch das Designen der Gui gehangelbet.
Nun stehe ich allerdings vor folgendem Problem :
Ich habe ein wx.TreeCtrl-Widget, welches den User eine Verzeichnis-Struktur anhand von Mediendateien erstellen lässt. Dabei wird pro Datei jeweils ein Listeneintrag erstellt. Jeder Listeneintrag hat zudem ein Tupel als PyData mithängend.
Nun will ich, nachdem der User seinen Verzeichnis-Baum gebaut hat, den Baum abspeichern. Und hier komm ich irgendwie nicht weiter.
Hier ist meine bisherige Idee :
Sicherlich gibt es in Sachen Geschwindigkeit und Ästhetik noch diverse Code-Optimierungen. Mein erstes Ziel sollte die lauffähigkeit sein.
self.ListDBConf ist das Tree-Widget
Code: Alles auswählen
#Saving the Tree-Entry's
try:
f = open('treentry.data','w')
except IOError:
#Not able to Save the Tree
print "Error !"
return
if f.tell() != 0:f.seek(0)
if self.ListDBConf.GetCount() > 0:
fi = self.ListDBConf.GetFirstVisibleItem()
if fi == self.ListDBConf.GetRootItem():
fi = self.ListDBConf.GetNextVisible(fi)
d = self.ListDBConf.GetItemPyData(fi)
t = self.ListDBConf.GetItemText(fi)
if d == None:
f.write("0,0,"+str(t))
else:
f.write(str(d[0])+','+str(d[1])+','+str(t)+'\n')
f.flush()
for ts in range(0,self.ListDBConf.GetCount()-1):
if self.ListDBConf.ItemHasChildren(fi):
self.ListDBConf.ExpandAllChildren(fi)
fi = self.ListDBConf.GetNextSibling(fi)
else:
fi = self.ListDBConf.GetNextVisible(fi)
d = self.ListDBConf.GetItemPyData(fi)
t = self.ListDBConf.GetItemText(fi)
if d == None:
f.write("0,0,"+str(t))
else:
f.write(str(d[0])+','+str(d[1])+','+str(t)+'\n')
f.flush()
Problem ist, dass die Methode wx.TreeCtrl.GetNextSibling() oder wx.TreeCtrl.GetNextVisible() anscheinend nicht so funktioniert, wie ich mir dies erhofft habe. Er speichert nur nen Haufen Nullen und nichtmal die Namen der Untereinträge.
Ich hab bereits gedacht, ob man das ganze auch via Rekursion viel einfacher machen kann, aber wenn es schon daran scheitert, dass ich nicht jedes Tree-item nacheinander abfragen kann, dann geht das wohl auch nicht...
Falls also einer von euch eine Idee hat, wie ich TreeItems gut abspeichern kann, damit sie einfach wieder in einem leeren Tree zu erstellen sind, dann nur raus damit^^
Ich freue mich über jeden Vorschlag
Sollte es noch Fragen zu meiner Frage geben, etwa wenn ich mich ungünstig formuliert habe, dann nur raus damit.
Ich bedanke mich im Vorraus für jede Hilfe und wünsche noch einen schönen Tag.
LegaCer