Das Thema war aber: Zugriff auf Funktionsrückgabewert. Bei einer normalen GUI-Anwendung erhält man auch einen Wert aber es ist kein 'Funktionsrückgabewert', sondern ein Weitergabewert.BlackJack hat geschrieben:@Alfons Mittelmeyer: Da gehen ja dauernd Fenster auf und wieder zu. Es geht *noch* einfacher, in dem man einfach eine ganz normale GUI-Anwendung programmiert, ereingnisbasiert, und nicht den Versuch unternimmt das irgendwie wieder in einen ”linearen” Programmablauf zwängen zu wollen.
Zugriff auf Funktionsrückgabewert bei .bind() an Entry-Widget
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
Du brauchst gar nicht das mit dem Eventhandler zu machen, um zu wissen was im Entry Feld steht.Terahnee hat geschrieben: Meine Frage ist nun: Wie kann ich mit diesen Daten weiterarbeiten? Ich umgehe das Problem momentan indem ich in der Eventhandler-Funktion die Ausgaben mache, aber das ist ja sicherlich nicht Sinn der Sache. Wenn ich die Datenbankabfrage mit einem "return" zurückgebe, wo landet das dann? Wie kann ich darauf zugreifen? Geht das überhaupt?
Anstatt den eingescannten Wert an das Entryfeld zu übergeben und wegzuwerfen, kannst Du Dir ihn ja vorher merken. Außerdem kann man auch den Wert aus dem Entryfeld herauslesen ohne dass Return gedrückt wird und Du dann einen Eventhandler brauchst.
Es geht hier ganz ohne Return:
Code: Alles auswählen
import tkinter as tk
class Application(tk.Tk):
def __init__(self,**kwargs):
tk.Tk.__init__(self,**kwargs)
# widget definitions ===================================
self.variable = tk.StringVar()
self.entry = tk.Entry(self,textvariable = self.variable,state='readonly')
self.entry.pack()
self.entry.focus_set()
# later
self.variable.set(self.scan_barcode())
# wie bekommt man heraus, was im entry Feld steht?
# stattdessen geht es auch so
value = self.scan_barcode()
self.variable.set(value)
# testen
entry_value = self.entry.get()
yes = value == entry_value
print("{} == {} ? {}!".format(value,self.entry.get(),'ja' if yes else 'nein'))
def scan_barcode(self):
# wert zum testen
return '34516896'
Application().mainloop()
Ich möchte es ja gerade mit einem Return machen, weil mir der Barcode-Scanner beim Scanvorgang direkt ein Return mitliefert. Das dient der Bequemlichkeit, da der Benutzer so nach Einlesen des Barcodes keinen Knopf mehr zu drücken braucht.Alfons Mittelmeyer hat geschrieben: Du brauchst gar nicht das mit dem Eventhandler zu machen, um zu wissen was im Entry Feld steht.
Anstatt den eingescannten Wert an das Entryfeld zu übergeben und wegzuwerfen, kannst Du Dir ihn ja vorher merken. Außerdem kann man auch den Wert aus dem Entryfeld herauslesen ohne dass Return gedrückt wird und Du dann einen Eventhandler brauchst.
Es geht hier ganz ohne Return:
Dein Hinweis, dass man einen Wert aus einem Entryfeld natürlich an jeder Stelle lesen kann, hat mich aus meinem falschen Denken herausgebracht. Es funktioniert jetzt so wie es sollte! Vielen Dank an alle Beteiligten.