Seite 1 von 1

E-Mailprogramm - Optionenmenü

Verfasst: Montag 20. Juni 2011, 14:26
von jtschoch
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

Re: E-Mailprogramm - Optionenmenü

Verfasst: Montag 20. Juni 2011, 19:58
von daemonTutorials
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!

Re: E-Mailprogramm - Optionenmenü

Verfasst: Dienstag 21. Juni 2011, 10:04
von EyDu
@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

Re: E-Mailprogramm - Optionenmenü

Verfasst: Dienstag 21. Juni 2011, 15:34
von jtschoch
Mit lambda und in solchen dingen kenne ich mich nicht so aus.

Re: E-Mailprogramm - Optionenmenü

Verfasst: Dienstag 21. Juni 2011, 15:38
von Hyperion
jtschoch hat geschrieben:Mit lambda und in solchen dingen kenne ich mich nicht so aus.
Dann eigne es Dir doch an ;-)