Zu meinem Anliegen: Meine Anwendung startet mit einem leeren Eingabefeld was über .focus() den Fokus bekommt. Mit einem Barcode-Scanner wird nun eine achtstellige Artikelnummer gefolgt von einem Enter (bzw. der Barcode-Scanner setzt einen Carriage Return nachdem er einen Code eingelesen hat) eingegeben. An das Eingabefeld habe ich daher einen Eventhandler gehängt der auf das Drücken der Enter-Taste (bzw. den Barcode-Scanner) reagiert. Diese Funktion macht dann mit dem Wert aus dem Eingabefeld eine Datenbankabfrage.
Ziel des ganzen ist dass man nur über das einscannen selbst die Daten angezeigt bekommt. Also ohne eine weitere Taste oder einen Button zu drücken.
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?
Vielen Dank schon mal im Voraus!
Gruß Terahnee
Code: Alles auswählen
import tkinter as tk
import sqlite3
def run_query(query, parameters=()):
with sqlite3.connect('MeineDatenbank.db') as conn:
cursor = conn.cursor()
query_result = cursor.execute(query, parameters)
conn.commit()
return query_result
def zeige_artikel_aus_db(keypressevent):
query = 'SELECT * FROM artikel WHERE id=?'
parameters = [eingabe.get()]
artikel = run_query(query, parameters)
for row in artikel.fetchall():
print(row[1])
label_artikelname = tk.Label(root, text=row[1])
label_artikelname.pack()
label_beschreibung = tk.Label(root, text=row[2])
label_beschreibung.pack()
# ... und so weiter mit allen Informationen
root = tk.Tk()
lb = tk.Label(root, text="Artikelnummer: ")
lb.pack()
artikelnummer = ""
eingabe = tk.Entry(root, textvariable=artikelnummer)
eingabe.pack()
eingabe.bind("<Return>", zeige_artikel_aus_db)
eingabe.focus()
root.geometry("1024x768")
root.mainloop()