Aufruf von get() gibt Fehler (Newbee)

Fragen zu Tkinter.
Antworten
kommando_pimperlepim
User
Beiträge: 23
Registriert: Dienstag 3. April 2007, 05:32

Sonntag 10. Juni 2007, 10:07

Hallo. In meinem Programm klappt das Abfragen von Werten mittels get() nicht.

Folgendes Minimalbeispiel funktioniert einwandfrei:

Code: Alles auswählen

from Tkinter import *
def clicked():
    print e1.get()
win=Tk()
e1=Entry(win)
e1.pack()
b_calc=Button(win,text='ok',command=clicked)
b_calc.pack()
win.mainloop()
Deshalb muss ich euch leider den kompletten Code meines Programmes geben:

Code: Alles auswählen

from numpy import *                                 # "
from Tkinter import *

def quicklabels(labels,texts,rows,columns):
    '''Erstellt Labels und richtet sie mit grid-Befehl aus.
    labels  : Array mit Namen fuer Labels
    texts   : Array mit Texten fuer Labels
    rows    : Array mit row-Attribut fuer grid-Befehl
    columns : Array mit column-Attribut fuer grid Befehl'''
    for i in arange(len(labels)):
        exec(labels[i]+'=Label(win,text=\''+texts[i]+'\')')
        exec(labels[i]+'.grid(row='+str(rows[i])+',column='+str(columns[i])+')')

def quickedits(edits,rows,columns):
    '''Erstellt Entries, analog wie quicklabels'''
    for i in arange(len(edits)):
        exec(edits[i]+'=Entry(win)')
        exec(edits[i]+'.grid(row='+str(rows[i])+',column='+str(columns[i])+')')

def clicked():
    print e_L.get()

win=Tk()
quicklabels(['l_L','l_N','l_hqe','l_mu','l_sg_x','l_sg_p','l_g_x','l_g_p'],
['L=','N=','hq_eff=','mu=','sq_x=','sg_p=','g_x=','g_p='],[0,1,2,3,0,1,2,3],
[0,0,0,0,2,2,2,2])
quickedits(['e_L','e_N','e_hqe','e_mu','e_sg_x','e_sg_p','e_g_x','e_g_p'],
[0,1,2,3,0,1,2,3],[1,1,1,1,3,3,3,3])
b_calc=Button(win,text='berechnen',command=clicked)
b_calc.grid(row=4,column=3)
win.mainloop()
Wenn ich den Button anklicke erhalte ich die Meldung
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Studium\04\C
ompPhys\³09\test_get_problem.py", line 22, in clicked
print e_L.get()
NameError: global name 'e_L' is not defined

Liegt das daran, dass das Entry-Widget e_L mit exec erstellt wurde?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 10. Juni 2007, 10:15

kommando_pimperlepim hat geschrieben:Liegt das daran, dass das Entry-Widget e_L mit exec erstellt wurde?
Ja. Nutze die Suchfunktion um rauszufinden, wie Widgets dynamisch generiert werden und vergesse dass es ``exec`` überhaupt gibt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten