Die Theorie:
Ich lasse mir die Inhalte einer Spalte der DB Tabelle in einer Listbox ausgeben. Sobald eine
Zeile selektiert wurde übergebe ich deren Inhalt per bind() Methode irgendwo anders hin und
mache damit weis Gott was...
Soweit kein Problem!
Aus der Auswahl heraus sollen nun aber neue Auswahlmöglichkeiten resultieren, welche in Abhänigkeit
zueinander stehen. Ist ja gängige Praxis...
Selbstverständlich sollen die Ergebnisse anhand des Primary Keys aus der DB ausgelesen werden und nicht anhand des Wertes!
Dieser ist zwar auch eindeutig, muss es aber nicht zwingend bleiben. Da ich aus dem PHP Bereich komme, wäre meine erste Idee
ein "hidden value" zu übergeben welche den Wert des Primary Keys enthält... (Ich bin mir nicht sicher ob der Terminus im Python
Kontext richtig ist, also verzeit mir wenn nicht )
Genau das ist wohl der 'tricky' Teil an dem ganzem! Ich möchte NICHT den Listbox eigenen Index auslesen, was ja mit curselection()
Problemlos möglich ist.
Im Prinzip muss ich also entweder einen versteckten Wert übergeben oder den Listbox Index durch den Wert der ID des ausgewählten Elements
aus der DB ersetzen...
Also das was der Kollege hier http://stackoverflow.com/questions/1075 ... er-listbox schon versucht hat. Der dort
vorgeschlagene Lösungsweg scheint mir jedoch wenig praktikabel da sich die Indexe ja verändern können, zum Beispiel durch Löschen oder
hinzufügen eines Eintrags.
Der Ansatz:
Code: Alles auswählen
from tkinter import *
window = Tk()
class ListboxSelect:
def __init__(self):
self.list = Listbox(window)
# das ist nur eine beispiel Liste, normal wäre das das Resultat einer
# DB Abfrage
ls = [[1, "foo"], [2, "bar"], [3, "lala"], [4, "dubi"]]
for item in ls:
self.list.insert(END, item[1])
# Wenn ich das richtig sehe wäre ja hier der punkt um die ID dem Index zu zuweisen....
self.list.bind("<Double-Button-1>", self.onselect)
self.list.pack()
def onselect(self, event):
#irgendwo hier muss ich die ID des gewählten Eintrags
#zur weiteren Verarbeitung einer Variable zuordnen...
widget = event.widget
selection = widget.curselection()
value = widget.get(selection)
print("Ausgewählt: " + str(value))
ListboxSelect()
window.mainloop()
bin ich der Lösung noch nicht wirklich näher gekommen... Vielleicht suche ich aber auch nur nach den falschen Dingen! :K
Also wenn jemand einen hilfreichen Tip oder sogar eine Lösung am Start hat wäre ich unendlich dankbar...
Gruß Markus