Eigenes Entry Feld mit Vervollständigung
Verfasst: Dienstag 7. April 2020, 23:46
Hallo allerseits,
für ein Programm, das Rezepte verwaltet stehe ich aktuell vor einem Problem. Ich habe eine Möglichkeit gesucht, ein entry Feld zu erstellen, dass mir automatische Einträge aus einer Liste vorschlägt, während ich tippe. Ich habe ein solches Feld online gefunden, das funktioniert auch ganz prächtig. Jetzt möchte ich eine Funktion hinzufügen, bei der Rezepte automatisch aus Chefkoch ausgelesen werden. Die Zutaten sollen dann nochmal von einer Person überprüft werden, damit man am Ende nicht "zwiebel" und "zwiebeln" in der DB hat (zum Beispiel). Das heißt, das Entry Feld muss 1. weiterhin die Vorschläge aus der DB holen, so wie bisher und 2. wenn das Entry Feld aufgerufen wird muss der Wert, den ich von Chefkoch bekomme in dem Feld stehen.
Problem ist, dass ich bisher nur eins der beiden schaffe, aber nie beides gleichzeitig (manchmal auch gar keins
)!
Die Zutat von Chefkoch steht in einer tk.StringVar, die ich dem Eintry Feld übergebe:
Ich weiß leider nicht mehr, wo ich das Entry Feld hergenommen habe, sonst hätte ich es natürlich verlinkt.
Aber so sah es aus als ich es mir rein kopiert habe:
Die Funktionen selection, changed, up und down kopiere ich euch nicht rein, die funktionieren auch noch.
Da self.var ja offensichtlich nicht mehr "" ist, habe ich folgendes hinzugefügt (letzte 2 Zeilen):
Sieht auch einigermaßen vielversprechend aus, Problem ist nur, dass statt z.B. Zwiebeln in meinem Entry Feld so was wie "PY_VAR2", mit beliebiger Nummer steht. So weit ich mich einlesen konnte, müsste das daran liegen, dass self.var eben leider nicht die von mir angegebenen zwiebeln sind, sondern die interne Bezeichnung.
Also meine Frage: Gibt es einen Weg, wie ich das so ändern kann, dass da eine Zutat steht und keine interne tkinter Bezeichnung? Und wenn ja, wie sieht dieser Weg aus?
Bleibt gesund!
seb-korn
für ein Programm, das Rezepte verwaltet stehe ich aktuell vor einem Problem. Ich habe eine Möglichkeit gesucht, ein entry Feld zu erstellen, dass mir automatische Einträge aus einer Liste vorschlägt, während ich tippe. Ich habe ein solches Feld online gefunden, das funktioniert auch ganz prächtig. Jetzt möchte ich eine Funktion hinzufügen, bei der Rezepte automatisch aus Chefkoch ausgelesen werden. Die Zutaten sollen dann nochmal von einer Person überprüft werden, damit man am Ende nicht "zwiebel" und "zwiebeln" in der DB hat (zum Beispiel). Das heißt, das Entry Feld muss 1. weiterhin die Vorschläge aus der DB holen, so wie bisher und 2. wenn das Entry Feld aufgerufen wird muss der Wert, den ich von Chefkoch bekomme in dem Feld stehen.
Problem ist, dass ich bisher nur eins der beiden schaffe, aber nie beides gleichzeitig (manchmal auch gar keins

Die Zutat von Chefkoch steht in einer tk.StringVar, die ich dem Eintry Feld übergebe:
Code: Alles auswählen
enterZutat = AE.ZutatEntry(self.fenster, textvariable = varZutat)
Aber so sah es aus als ich es mir rein kopiert habe:
Code: Alles auswählen
class ZutatEntry(Entry):
def __init__(self, *args, **kwargs):
Entry.__init__(self, *args, **kwargs)
self.var = self["textvariable"]
if self.var == '':
self.var = self["textvariable"] = StringVar()
self.var.trace('w', self.changed)
self.bind("<Return>", self.selection)
self.bind("<Tab>", self.selection)
self.bind("<Up>", self.up)
self.bind("<Down>", self.down)
self.lb_up = False
Da self.var ja offensichtlich nicht mehr "" ist, habe ich folgendes hinzugefügt (letzte 2 Zeilen):
Code: Alles auswählen
class ZutatEntry(Entry):
def __init__(self, *args, **kwargs):
Entry.__init__(self, *args, **kwargs)
self.var = self["textvariable"]
if self.var == '':
self.var = self["textvariable"] = StringVar()
else:
self.var = self["textvariable"] = StringVar(value=self.var)
Also meine Frage: Gibt es einen Weg, wie ich das so ändern kann, dass da eine Zutat steht und keine interne tkinter Bezeichnung? Und wenn ja, wie sieht dieser Weg aus?
Bleibt gesund!
seb-korn