global name 'funktion' is not defined

Fragen zu Tkinter.
Bluecaspar
User
Beiträge: 27
Registriert: Samstag 18. März 2006, 20:06

global name 'funktion' is not defined

Beitragvon Bluecaspar » Sonntag 19. März 2006, 17:47

Code: Alles auswählen

from Tkinter import *

class MainDialog:
               
    def funktion():
        print 'x'
   
    def __init__(self,master):
       
        frame=Frame(master)
        frame.pack()
        master.title('x')
       
        menubar=Menu(frame,relief=FLAT)
        master.config(menu=menubar)
        optionsmenu=Menu(menubar,tearoff=0)
        optionsmenu.add_command(label='Change Label',command=funktion)
        menubar.add_cascade(label='Options', menu=optionsmenu)
        master.config(menu=menubar)
       
        pi = PhotoImage(file='/media/datenplatte/pictures/python3.gif')
        l1 = Label(frame,background="white",image=pi).grid(row=0,column=0,columnspan=2)
        l2 = Label(frame,text='Good morning World').grid(row=1,column=1)
       
        mainloop()




root=Tk()
x=MainDialog(root)




Wenn ich das Programm ausführen möchte, kommt immer die Nachricht "global name 'funktion' is not defined". Kann mir jemand sagen warum die Definition der Funktion nicht gefunden wird?

Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Sonntag 19. März 2006, 18:43

Setz deinen Code mal in Python-Tags, dann sehen wir auch die Einrueckungen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 19. März 2006, 19:32

Ich habe mein Tkinter gelöscht, aber ich sehe hier gleich mehrere Fehler:
  1. Code nicht in Python-Tags gesetzt. Hab ich gemacht ;)
  2. es müsste

    Code: Alles auswählen

    def funktion(self):
    heißen, also fehlt da noch das self.
  3. Und auch hier fehlt wieder das self:

    Code: Alles auswählen

    optionsmenu.add_command(label='Change Label',command=self.funktion)
    Das self bedeutet, dass du dich auf die Funktion funktion() der aktuellen Klasse beziehst, nicht auf die globale Funktion funktion(), die es ja durchaus auch geben kann

HTH!
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Bluecaspar
User
Beiträge: 27
Registriert: Samstag 18. März 2006, 20:06

Beitragvon Bluecaspar » Sonntag 19. März 2006, 20:34

Prima, so funktionierts einwandfrei. Muss noch ein wenig Erfahrung mit Klassen unter Python sammeln.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]