global name 'funktion' is not defined

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

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:

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

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 (former) Modvoice
Bluecaspar
User
Beiträge: 27
Registriert: Samstag 18. März 2006, 20:06

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