ich weiß mir nicht mehr zu helfen, aber vielleicht hat ja jemand von euch eine
Idee.
Folgendes Problem: Der untenstehende Code ist aus einem GUI von mir - und zwar
aus einem File-Dialog (nehmt einmal an, die Einrückung stimmt, wenn sie denn
wieder verrutscht sein sollte). Wenn der Anweder eine Datei auswählt, so soll
ein best. Objekt initialisiert werden (mit Parametern aus der Datei). Das
funktioniert auch. Dieses Objekt wird an die Liste "datasets" gehangen.
Wenn der Anwender nun noch eine Datei öffnen will, so möchte ich
sicherstellen, daß nicht zweimal dasselbe angezeigt wird. Also überprüfe ich,
ob ein Objekt gleichen Namens schon existiert. Dies geschieht über die Liste
self.active_datasets, die in der ganzen Anwendung bekannt ist. Und zwar
passiert das auch schon bei der ersten Datei, die geöffnet wird: Name noch
nicht in self.active_datasets? (weil leer) - dann wird es drangehangen.
Der Code:
Code: Alles auswählen
:
#Vorgeplaenkel:
datasets = []
if file_dialog.ShowModal() == wx.ID_OK:
paths = file_dialog.GetPaths()
for path in paths:
<snip>
elif path[-4:] == '.out':
x = SAXSdata().fromGNOM(path)
datasets.append(x)
<snip>
file_dialog.Destroy()
print '====='
names = [x.get_name() for x in self.active_datasets]
print names
for x in datasets:
print x.get_name()
if not (x.get_name() in names):
self.active_datasets.append(x)
print datasets
print self.active_datasets
===== #erster Durchlauf
[] #self.active_datasets ist noch eine Leere Liste - also auch names
270_oxy #Name des einzigen Elementes in datasets
[<lib.Data.SAXSdata instance at 0x1313d40>] #Liste datasets mit
Speicheradresse des Objektes
[<lib.Data.SAXSdata instance at 0x1313d40>] #Liste self.active_datasets mit
Speicheradresse des Objektes
=====
[u'285_oxy'] #Namen in self.active_datasets - WIESO NAME DES ZWEITEN FILES?
285_oxy #Name des einzigen Elementes in datasets
[<lib.Data.SAXSdata instance at 0x2aaaba264998> ]#Liste datasets mit
Speicheradresse des Objektes
[<lib.Data.SAXSdata instance at 0x1313d40>] #Liste self.active_datasets mit
Speicheradresse des Objektes
Eigentlich sollte das neue Element in datasets an self.active_datasets
gehangen werden, da die Namen der Elemente in den Listen nicht gleich sind.
Aber aus irgendeinem Grund findet sich der Name (und andere Daten) beim
zweiten Aufruf der Funktion schon in self.active_datasets. Ist damit gleich
dem Namen des Elementes in datasets und dieses Element wird nicht an
self.active_datasets gehangen.
Unbegreiflich, da datasets am Ende der Funktion das Leben aushaucht und
self.active_datasets (ist überprüft) niergendwo anders manipuliert wird.
Das Witzige ist: Das geschieht nur bei Dateien eines Formates. Wenn ich ein
anderes Format öffne, wird das Objekt auf andere Weise erstellt - das
resultierende Objekt ist aber vom gleichen Typ - und ohne Probleme an
self.active_datasets angehangen. (Die zum Lesen der Dateien aufgerufenen
Funktionen (fromXXX-Typ, s. oben) kennen aber die beiden relevanten Listen
gar nicht.)
Woran kann es liegen? (Ich zeige allen relevanten Code.)
Christian