Seite 1 von 1

global name 'funktion' is not defined

Verfasst: Sonntag 19. März 2006, 17:47
von Bluecaspar

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.

Verfasst: Sonntag 19. März 2006, 18:43
von Rebecca
Setz deinen Code mal in Python-Tags, dann sehen wir auch die Einrueckungen.

Verfasst: Sonntag 19. März 2006, 19:32
von Leonidas
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!

Verfasst: Sonntag 19. März 2006, 20:34
von Bluecaspar
Prima, so funktionierts einwandfrei. Muss noch ein wenig Erfahrung mit Klassen unter Python sammeln.