Seite 1 von 1

Entry.get() Methode funktioniert nicht.

Verfasst: Sonntag 6. September 2015, 13:32
von MozE
Moin Leute.
Ich habe öfter mal das Problem wenn ich mit dem tkinter Modul arbeite, das ich wenn es mehrere fenster gibt keine abfragen mehr mit.get() machen kann.
Ich habe dazu mal ein Beispiel geschrieben.
Hier der Code:

Code: Alles auswählen

import tkinter

def check():
    intake=ent1.get()
    intake2=ent2.get()
    result=intake1+intake2
    lb1["text"] = result
    new.destroy()

def second():
    ###
    global new
    new=tkinter.Toplevel(main)
    ###
    new.title("2nd window")
    #Label/Entry/Butt0n#
    lb2=tkinter.Label(new, text="Write Numbers")
    ent1=tkinter.Entry(new)
    ent2=tkinter.Entry(new)
    but2=tkinter.Button(new, text="check", command=check)
    #pack
    lb2.pack()
    ent1.pack()
    ent2.pack()
    but2.pack()
    #.get method
    name=ent1.get()
    #Loop#
    new.mainloop()
    


main=tkinter.Tk()
main.geometry("300x300")
main.title("1st")

#Label/Button#
lb1=tkinter.Label(main, text="Welcome")
but1=tkinter.Button(main, text="okey", command=second)
#pack
lb1.pack()
but1.pack()

#Loop#
main.mainloop()
Was mir als Fehlercode angezeigt wird ist folgendes:

Code: Alles auswählen

"Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\lib\tkinter\__init__.py", line 1533, in __call__
    return self.func(*args)
  File "C:\Users\Davide\Desktop\beispiel.py", line 4, in check
    intake=ent1.get()
NameError: name 'ent1' is not defined"
Wenn die Antwort sehr einfach ist tut es mir sehr leid(Programmiere noch nicht sehr lange)!
Danke!

Re: Entrie.get() Methode funktioniert nicht.

Verfasst: Sonntag 6. September 2015, 13:34
von Sirius3
@MozE: wie erzeugst Du die mehrere Fenster?

Re: Entry.get() Methode funktioniert nicht.

Verfasst: Sonntag 6. September 2015, 18:45
von BlackJack
@MozE: Das hat nichts mit der Anzahl der Fenster zu tun sondern das lokale Namen inerhalb einer Funktion halt nur innerhalb des Funktionsaufrufes sichtbar sind. Das wäre sonst auch unbenutzbar denn dann müsste man sich ja in jeder Funktion neue Namen ausdenken die in keiner anderen Funktion schon verwendet werden. Also in wirklich *keiner* — auch nicht in anderen Modulen die man gar nicht selber geschrieben hat und deswegen gar nicht weiss welche Namen dort lokal in Funktionen verwendet werden.

Neben einer deutlich besseren Namensgebung solltest Du Dich mit objektorientierter Programmierung auseinandersetzen. Und kein ``global`` verwenden und auf Modulebene sowieso ausser Konstanten, Funktionen, und Klassen nichts definieren.

Re: Entry.get() Methode funktioniert nicht.

Verfasst: Sonntag 6. September 2015, 19:50
von MozE
@BlackJack Danke mache ich mal :)

Re: Entry.get() Methode funktioniert nicht.

Verfasst: Sonntag 6. September 2015, 20:47
von Alfons Mittelmeyer
@MoZe: ist klar, dass das nicht geht, denn check() kennt ja die lokalen Variablen von second() nicht.

Wichtig: nicht zweimal mainloop. werfe Zeile 29 heraus. Ein Toplevel braucht kein extra mainloop.

Dann:
- mach new nicht global in second
- definiere def check innerhalb von second - am Ende
- und den callback mit dem Button verschiebst Du evtl. nach dahinter

Re: Entry.get() Methode funktioniert nicht.

Verfasst: Dienstag 8. September 2015, 17:02
von MozE
@Alfons Mittelmexer Vielen vielen Dank! Jetzt funktionierts auch!