Listbox und curselection()
Guten Abend, für die Verwendung in einem Dialog habe ich folgende Klasse (hier gekuertzt wiedergegeben) programmiert: .... class Listbox: def __init__(self, master,select): self.daten=[] self.liste=["Test1","Test2","Test5","Test4","Test3"] self.toplevel=Tkinter.Toplevel(master) self.toplevel.withdraw() # Toplevel noch nicht anzeigen self.result=Tkinter.StringVar() self.listbox=Tkinter.Listbox(self.toplevel,selectmode=select) self.listbox.pack() self.button1=Tkinter.Button(self.toplevel,text="OK",command=self.ok) self.button1.pack() def einlesen(self,): self.liste.sort() for i in self.liste: self.listbox.insert(END,i) def auslesen(self,): a=self.listbox.curselection() for i in a: b=Tkinter.getint(i) self.daten.append(self.liste[b]) return self.daten def ok(self,): self.result.set("ok") self.toplevel.destroy() def show(self,): self.toplevel.deiconify() self.toplevel.wait_window() return self.result.get() if __name__ == "__main__": tk=Tkinter.Tk() dia=Listbox(tk,EXTENDED) dia.einlesen() if dia.show() == "ok": print dia.auslesen() else: print "Abgebrochen" wenn ich das Programm starte und irgend ein Element auswähle und mit OK bestaetige bekomme ich folgende Fehlermeldung: Traceback (most recent call last): File "./listbox.py", line 54, in ? print dia.auslesen() File "./listbox.py", line 30, in auslesen a=self.listbox.curselection() File "/usr/lib/python2.2/lib-tk/Tkinter.py", line 2336, in curselection return self.tk.splitlist(self.tk.call( TclError: invalid command name ".136326436.136699908" Ich glaube der Fehler haengt mit der Methode curselection() zusammen, weiter komme ich aber nicht. Vieleicht weis ja einer von euch wo der Fehelr steckt. Ich bedanke mich schon mal fuer die Hilfe. Mit freundlichen Gruessen Albert Hermeling _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Albert Hermeling wrote:
Guten Abend,
für die Verwendung in einem Dialog habe ich folgende Klasse (hier gekuertzt wiedergegeben) programmiert:
....
if __name__ == "__main__":
tk=Tkinter.Tk() dia=Listbox(tk,EXTENDED) dia.einlesen()
if dia.show() == "ok": print dia.auslesen() else: print "Abgebrochen"
wenn ich das Programm starte und irgend ein Element auswähle und mit OK bestaetige bekomme ich folgende Fehlermeldung:
... TclError: invalid command name ".136326436.136699908"
Ich glaube der Fehler haengt mit der Methode curselection() zusammen, weiter komme ich aber nicht.
Wenn du dia.auslesen() aufrufst, dann existiert self.listbox nicht mehr, da du vorher schon die ganze Widget-Hierarchie abgerissen hast. Du must im Callback für den OK-Button den aktuellen Wert in einem Instanz-Attribut hinterlegen, und in auslesen() dann auf dieses Attribut zurückgreifen. -schorsch -- Georg Mischler -- simulations developer -- schorsch at schorsch com +schorsch.com+ -- lighting design tools -- http://www.schorsch.com/ _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
Am Dienstag, 29. Juli 2003 18:03 schrieb Georg Mischler:
Albert Hermeling wrote:
Guten Abend Georg,
Wenn du dia.auslesen() aufrufst, dann existiert self.listbox nicht mehr, da du vorher schon die ganze Widget-Hierarchie abgerissen hast. Du must im Callback für den OK-Button den aktuellen Wert in einem Instanz-Attribut hinterlegen, und in auslesen() dann auf dieses Attribut zurückgreifen.
danke das war die Loesung. Ich habe einfach aus der Methode auslesen() alles bis auf return in die Methode OK kopiert. Jetzt funktioniert es wie gewuenscht. Ich wuensche euch allen einen schoenen Sommerabend MfG Albert _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de
participants (2)
-
Albert.Hermeling@t-online.de
-
Georg Mischler