bestimmt ganz einfach... Abfrage eines Eingabefeldes

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
marconisahib
User
Beiträge: 22
Registriert: Montag 25. Juni 2018, 08:34

wie im kleinen Beispiel, benötige ich eine direkte Abfrage nach der Eingabe. abgleich() steht gleich nach e1 = Entry(master)
nach dem Start ist das Feld noch unbelegt, nach mainloop() wird die def abfrage ignoriert.

from Tkinter import *

def abgleich():
if e1.get() == "meier":
x = Label(master, text= " Achtung " , bg="white", fg="red").grid(row=0,column=1, sticky=W)
else:
x = Label(master, text= " der naechste " , bg="white", fg="green").grid(row=0,column=1, sticky=W)
e1.focus_set()

master = Tk()
Label(master, text="First Name").grid(row=1)
Label(master, text="Last Name").grid(row=2)

e1 = Entry(master)
#e1.insert(1,"meier")
abgleich()
e2 = Entry(master)

e1.grid(row=1, column=1)
e2.grid(row=2, column=1)


mainloop( )
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du willst, dass sich die Label anpassen, mußt Du eben `abgleich` bei jeder Änderung von e1 aufrufen. Dort hast Du dann aber das Problem, dass Du ständig neue Labels erzeugst, Du mußt also einmal ein Label erzeugen, dessen Inhalt du änderst.
marconisahib
User
Beiträge: 22
Registriert: Montag 25. Juni 2018, 08:34

sri , versteh ich nicht.
`abgleich` bei jeder Änderung von e1aufrufen.
ja das will ich ja, aber mainloop() irgnoriert den Aufruf,
Kannst Du das im Muster einsetzten??
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@marconisahib: `mainloop()` ignoriert den Aufruf nicht. Du führst den nur einmal aus, bevor Du `mainloop()` aufrufst und damit dem Benutzer erst ermöglichst etwas einzugeben.

Der Sternchenimport sollte nicht sein und auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Die Namen sollten besser als `e1`, `e2` o.ä. sein. `x` wird der Wert `None` zugewiesen, das ist nämlich der Rückgabewert von `grid()`.

Du brauchst für jede nicht-triviale GUI letztendlich objektorientierte Programmierung (OOP). Das würde ich empfehlen erst zu lernen, bevor dann noch die ereignisbasierte Programmierung von GUIs dazu kommt. Sonst muss man das alles gleichzeitig lernen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@marconisahib: GUIs arbeiten ereignisorientiert. Du mußt also Ereignis "Inhalt von e1 hat sich geändert" die Funktion `abgleich` zuordnen.
Wenn Dir das jetzt noch nichts sagt, dann mußt Du in dem Tutorial, mit dem Du TkInter lernst, so weit durcharbeiten, bis dieser Punkt dran war.
Davor solltest Du aber, wie BlackJack schon geschrieben hat, erst objektorientierte Programmierung lernen, denn jedes gute TKInter-Tutorial hat das als Voraussetzung.
marconisahib
User
Beiträge: 22
Registriert: Montag 25. Juni 2018, 08:34

Oh Oh oh, ich bin 77 JAHRE UND PROGRAMMIERE SEIT 1969 (technische Programmierung - Setzmaschinen) (ibm1130, 370, Prozessrechner, Sinix, Linux, Mac, Dos -- und jetzt das noch.
Das Programm läuft linear unter python wunderbar. Jetzt muss ich mich noch mit OOP und GUI beschäftigen.
Wollte schon alles in den Müll werfen und mich in die Sonne setzen....schau'n wir mal.

Danke für Eure Tips.

Ich löse das erst einmal so:
wenn es mir noch gelingt den TAB von "First Name" direkt auf "chek" zu springen
und dann auf "Last Name"
ist die Sache nutzbar.


from Tkinter import *



def abgleich():
if e1.get() == "meier":
x = Label(master, text= " Achtung " , bg="white", fg="red").grid(row=0,column=1, sticky=W)
else:
x = Label(master, text= " der naechste " , bg="white", fg="green").grid(row=0,column=1, sticky=W)
e1.focus_set()

master = Tk()
Label(master, text="First Name").grid(row=1)
Label(master, text="Last Name").grid(row=2)
Button(master, text= "check",command=abgleich).grid(row=1,column=2,sticky=W,pady=4)

e1 = Entry(master)
e2 = Entry(master)

e1.grid(row=1, column=1)
e2.grid(row=2, column=1)

mainloop( )
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich würde ja eher die Eingabetaste im ersten Eingabefeld auch an die `abgleich()`-Funktion binden. Dann reicht ein Tastendruck anstelle von zwei (Tab, Space).
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
marconisahib
User
Beiträge: 22
Registriert: Montag 25. Juni 2018, 08:34

prima Danke+
Antworten