Toplevel-, Entry- und Variablenspeicherung; Problem

Fragen zu Tkinter.
Antworten
Marillus
User
Beiträge: 11
Registriert: Montag 22. Dezember 2014, 21:36

Hallo,

ich versuche seit einer Weile aus meinen Zweitfenster das ich via Toplevel auf Tastendruck öffne einen Wert aus dem Entry-Widget mit in mein Hauptfenster zu übertragen. Nur egal wie ich es versuche, es läuft immer auf die selbe Fehlermeldung hinnaus:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1490, in __call__
    return self.func(*args)
  File "/home/marillus/PythonProgramme/BorriesProjekt/Marillus.py", line 23, in store
    txtfeld["text"] = txttast.get()
NameError: name 'txttast' is not defined
Mein Fehler muss circa der sein, dass ich über ene Definition eine weitere Definition aufrufe. Und das geht wahrscheinlich nicht, weil dazu die Variable txttast vorher schon bekannt sein muss.
Weis jemand wie ich das Problem umgehen kann?

Code: Alles auswählen

import tkinter

#--------------------Definitionen-----------------------------------
def ende():
    main.destroy()

def tastedit(e):
    # Neues Fenster
    global neu
    neu = tkinter.Toplevel(main)
    neu.geometry("1024x600")
    # Textfeld
    txttast = tkinter.Entry(neu)
    txttast.pack()
    #Button zum Schließen
    bneu = tkinter.Button(neu, text="Schließen", command = endeneu)
    bneu.pack()
    # Button zum seperatem speichern
    bstore = tkinter.Button(neu, text = "Speichern", command = store)
    bstore.pack()

def store():
    txtfeld["text"] = txttast.get()
    
def endeneu():
    neu.destroy()

#------------------------Ende Definiitionen------------------------

# Vollbild und Desktopfunktionen
main = tkinter.Tk()
main.geometry("1024x600")
#main.attributes('-fullscreen', True)



# Escape Button
besc = tkinter.Button(main, text = "Exit", command = ende)
besc.place(x=10,y=10)


# Textfeld
txtfeld = tkinter.Label(main, width = 20, height = 1)
txtfeld["font"] = "Sans 16 bold"
txtfeld["bg"] = "#FFFFFF"
txtfeld.place(x=630, y=545)


# Linksklickfunktion
txtfeld.bind("<Button 1>", tastedit) # Funktion Linksklick im Textfeld aufrufen

# Endlosschleife Hauptfenster
main.mainloop()

Das Problem fängt mit dieser Zeile an:

Code: Alles auswählen

def store():
    txtfeld["text"] = txttast.get()
Ich habe auch versucht das mit Klassen zu lösen. Was auch wunderbar funktioniert hat, aber halt nur bis zu diesem Punkt wieder^^

Danke schonmal
BlackJack

@Marillus: Keine Daten und kein Code auf Modulebene ausser welcher der Konstanten, Funktionen, und Klassen definiert, kein ``global``, und ordentliche objektorientierte Programmierung lösen das Problem.
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

@Marillus: Für GUI-Programmierung braucht man recht schnell objektorientierte Programmierung. Du brauchst also für die beiden Fenster zwei Klassen, die aufeinander verweisen.
Antworten