E-Mailprogramm - Optionenmenü

Fragen zu Tkinter.
Antworten
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Hi, brauche mal Hilfe bei meinen Optionenmenü
Ich möchte da die Daten eintragen lassen und speichern aber er will sie bei Meinen Hauptprogrammm holen.

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "J:\JT_proj\python\E-Mailprogramm\Letters bird.py", line 223, in save
    usereintrag = eusereintrag.get()
NameError: global name 'eusereintrag' is not defined
Wie mache Ich das das er sie bei Optionen holt:

Code: Alles auswählen

def save():
    usereintrag = eusereintrag.get()
    mailservereintrag = emailservereintrag.get(options)
    daten = open("daten.cfd", 'w')
    daten.write(mailservereintrag)
    daten.write(usereintrag)
    daten.close()
    ask_quit()
  ###################################################################################
  
def options():
    master=Tkinter.Tk()
    master.title("E-Mailprogramm - Options")
    master.resizable(width=FALSE, height=FALSE)
    master.config(bg = "#E3E2E9")
    master.geometry('627x120')
    master.iconbitmap('mail6.dll' , '')
    info = Tkinter.Label(master, text = "Hier können sie ihre Daten als User eintragen:",  bg = "#E3E2E9",fg = "black",  
                         font =('Arial', 11, 'bold'))
    info.grid(row = 0)    
    lusereintrag = Tkinter.Label(master, text = "User:",  bg = "#E3E2E9",fg = "black",  
                                 font =('Arial', 11, 'bold'))
    
    lusereintrag.grid(row = 1)    
    eusereintrag = Tkinter.Entry(master, relief = "ridge", bg = "#FFFFFF", fg = "red",
                                 font =('Arial', 11, 'bold'))

    eusereintrag.grid(row = 1, column = 1, ipadx = 30, padx = 4, pady = 2)
    eusereintrag.insert(1, "Bsp. Max.Mustermann@gmx.de")
    
    lmailservereintrag = Tkinter.Label(master, text = "Mailserver:",  bg = "#E3E2E9",fg = "black",  
                                       font =('Arial', 11, 'bold'))

    lmailservereintrag.grid(row = 2)    

    emailservereintrag = Tkinter.Entry(master, relief = "ridge", bg = "#FFFFFF", fg = "red",
                                       font =('Arial', 11, 'bold'))

    emailservereintrag.grid(row = 2, column = 1, ipadx = 30, padx = 4, pady = 2)
    emailservereintrag.insert(2, "Bsp. mail.gmx.net")

    saveb = Tkinter.Button(master, text = "Save", bg = "white",
                           fg = "black",command = save)
    saveb.grid(row = 3, padx = 4, pady = 4, ipadx = 30)
    root.mainloop()
###################################################################################
Hier der vollständige Code hier
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
daemonTutorials
User
Beiträge: 171
Registriert: Sonntag 6. Februar 2011, 12:06
Kontaktdaten:

Führst du die 'options' VOR der Ausführung von 'save()' aus, und der PyInterpreter liest von oben nach unten, heißt, dass wenn die Variable noch keinem Tk-Element, etc. zugeordnet ist, kennt Python diese Variable nicht!

Einfach mal die Codeblöcke vertauschen!

Ein Guter Grund um mit der OOP anzufangen, da hasst du diesen Stress nicht!
LG Maik
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@daemonTutorials: Deine Erklärung ist absoluter Unsinn, ein Vertauschen der Reihenfolge bringt nichts, da jede Funktion ihren eigenen Namensraum hat.

@jtschoch: Du hast im Prinzip zwei Möglilchkeiten das Problem zu lösen. Entwender benutzt du einen sauberen objektorientierten Ansatz, über du übergibst der save-Funktion die benötigten Variablen. Dabei können dir lambda-Ausdrücke und `functools.partial` helfen.

Sebastian
Das Leben ist wie ein Tennisball.
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Mit lambda und in solchen dingen kenne ich mich nicht so aus.
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

jtschoch hat geschrieben:Mit lambda und in solchen dingen kenne ich mich nicht so aus.
Dann eigne es Dir doch an ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten