Seite 1 von 1

bestimmt ganz einfach... Abfrage eines Eingabefeldes

Verfasst: Montag 23. Juli 2018, 14:40
von marconisahib
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( )

Re: bestimmt ganz einfach... Abfrage eines Eingabefeldes

Verfasst: Montag 23. Juli 2018, 14:53
von Sirius3
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.

Re: bestimmt ganz einfach... Abfrage eines Eingabefeldes

Verfasst: Montag 23. Juli 2018, 15:11
von marconisahib
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??

Re: bestimmt ganz einfach... Abfrage eines Eingabefeldes

Verfasst: Montag 23. Juli 2018, 16:00
von __blackjack__
@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.

Re: bestimmt ganz einfach... Abfrage eines Eingabefeldes

Verfasst: Montag 23. Juli 2018, 16:38
von Sirius3
@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.

Re: bestimmt ganz einfach... Abfrage eines Eingabefeldes

Verfasst: Dienstag 24. Juli 2018, 10:22
von marconisahib
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( )

Re: bestimmt ganz einfach... Abfrage eines Eingabefeldes

Verfasst: Dienstag 24. Juli 2018, 10:45
von __blackjack__
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).

Re: bestimmt ganz einfach... Abfrage eines Eingabefeldes

Verfasst: Dienstag 24. Juli 2018, 10:48
von marconisahib
prima Danke+