Definitionsprobleme mit globalen Variablen in place_forget()

Fragen zu Tkinter.
Antworten
Evil4President
User
Beiträge: 83
Registriert: Dienstag 15. Januar 2008, 15:39
Kontaktdaten:

Dienstag 15. April 2008, 07:41

Hi all,

ich habe ja bereits einen anderen Post zu diesem Thema geöffnet, aber kamn bisher immernoch nicht zu einer funktionierenden Lösung, um Label zu löschen.

Code: Alles auswählen

def aufgabe_ggT():
    def ggtzurueck():
        ergebnistitel.place_forget()
        ergebnis.place_forget()
    fenster=Toplevel()
    fenster.title('Berechnen des ggT')
    fenster.geometry('400x180')
    titel1=Label(fenster,text=u'Geben Sie die erste Zahl an:')
    titel1.place(x=10,y=10)
    entry1=Entry(fenster,width=20)
    entry1.place(x=10,y=30)
    titel2=Label(fenster,text=u'Geben Sie die zweite Zahl an:')
    titel2.place(x=10,y=65)
    entry2=Entry(fenster,width=20)
    entry2.place(x=10,y=85)
    def do_ggT():
        zurueck=Button(fenster,text=u'Zurücksetzen',command=ggtzurueck)
        zurueck.place(x=90,y=120)
        try:
            d=float(entry1.get())
            e=float(entry2.get())
            if d < 0 or e < 0 :
                raise
                entry1.delete(0,END)
                entry2.delete(0,END)
            elif int(d) != d or int(e) != e :
                raise
                entry1.delete(0,END)
                entry2.delete(0,END)
            else:
                fenster.geometry('680x180')
                ergebnistitel=Label(fenster,text='Der ggT von '+str(entry1.get())+' und '+str(entry2.get())+' ist:',font=('Arial Black',13))
                ergebnistitel.place(x=200,y=25)
                ergebnis=Label(fenster,text=ggT(int(entry1.get()),int(entry2.get())),font=('Verdana',12))
                ergebnis.place(x=200,y=53)
                entry1.delete(0,END)
                entry2.delete(0,END)
Hier habe ich ja in einer Definition die Variablen ergebnistitel,ergebnis mit einem Label belegt. Wenn ich jetzt in der Definition oben Versuche, diese Labels mit ergebnistitel.place_forget() bzw. ergebnis.place_forget() auszublenden, bekomme ich in der IDLE immer fiolgende Meldung:

Code: Alles auswählen

ergebnistitel.place_forget()
NameError: global name 'ergebnistitel' is not defined
Auch wenn ich an die Stelle, an der ich die Variablen erstmals benutze ein "global" setze, passiert nicht die gewünschte Option. Es kommt allerdings auch keine Fehlermeldung mehr...

Ich hoffe mir kann jemand helfen, da auch in anderen Funktionen meines Programms dasselbe Problem auftritt...

MFG evil4president
BlackJack

Dienstag 15. April 2008, 09:55

Programm wegwerfen, Objektorientuerung lernen, alles neu schreiben. Und bitte ohne `place()`.
Evil4President
User
Beiträge: 83
Registriert: Dienstag 15. Januar 2008, 15:39
Kontaktdaten:

Mittwoch 16. April 2008, 16:40

Ja, nur da ich das in der Schule lerne und mir zuhause nicht all zu viel selbst beibringen kann, wobei ich das immer versuche, kann ich das noch nicht viel besser... ich glaube aber, dass hier kein super komplizierter fehler vorliegt...sonst würde das ja in der IDLE erscheinen. habe jetzt die definitionen etwas umgerückt und umgeschrieben. jetzt kommt auch nichtmehr die meldung, dass die label "not defined" sind. Allerdings löscht er einfach nicht das Label...

Bitte um Hilfe.

Hier der Code eines Ausschnittes:

Code: Alles auswählen

def bruch_ausgabe():
            z1.config(state=DISABLED)
            n1.config(state=DISABLED)
            z2.config(state=DISABLED)
            n2.config(state=DISABLED)
            ergebnis_pt1=Label(fenster,text=u'=',font=('bold',22))
            ergebnis_pt1.place(x=245,y=100)
            z3,n3=bruch_addieren(int(z1.get()),int(n1.get()),int(z2.get()),int(n2.get()))
            if len(str(z3))>len(str(n3)):
                length=int(len(str(z3)))
            else:
                length=int(len(str(n3)))
            z4=Label(fenster,text=z3)
            z4.place(x=300,y=70)
            s4=Label(fenster,text=(length+1)*'_')
            s4.place(x=299,y=104)
            n4=Label(fenster,text=n3)
            n4.place(x=300,y=151)
            def delete_label():
                z1.config(state=NORMAL)
                n1.config(state=NORMAL)
                z2.config(state=NORMAL)
                n2.config(state=NORMAL)
                z1.delete(0,END)
                z2.delete(0,END)
                n1.delete(0,END)
                n2.delete(0,END)
                z4.place_forget()
                ergebnis_pt1.place_forget()
                s4.place_forget()
                n4.place_forget()
                button.place_forget()
                plus.config(bg='grey93')
                minus.config(bg='grey93')
                mal.config(bg='grey93')
                durch.config(bg='grey93')
            button=Button(fenster,text=u'Neu Berechnen!',command=delete_label)
            button.place(x=100,y=200)
Beim Löschen gehts um die Label ergebnis_pt1,z4,s4,n4,button (Button^^)
Antworten