Seite 1 von 1

Toplevel-, Entry- und Variablenspeicherung; Problem

Verfasst: Mittwoch 7. Januar 2015, 16:41
von Marillus
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

Re: Toplevel-, Entry- und Variablenspeicherung; Problem

Verfasst: Mittwoch 7. Januar 2015, 16:53
von 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.

Re: Toplevel-, Entry- und Variablenspeicherung; Problem

Verfasst: Mittwoch 7. Januar 2015, 16:54
von Sirius3
@Marillus: Für GUI-Programmierung braucht man recht schnell objektorientierte Programmierung. Du brauchst also für die beiden Fenster zwei Klassen, die aufeinander verweisen.