Fehlermeldung bei Klick auf Button?

Fragen zu Tkinter.
Antworten
prachtschmerle
User
Beiträge: 2
Registriert: Mittwoch 23. Januar 2008, 17:50

Hallo,
bin blutiger Anfänger und kann einfach keine Lösung finden.Beim Klicken auf dem "By,By"-Button erhalte ich unten aufgeführte Fehlermeldung.Ist sicherlich nur eine Kleinigkeit,komm aber nicht drauf.Wer kann mir helfen?




Code: Alles auswählen



import tkMessageBox
from Tkinter import *				
				
				
class Telemanager(object):
    def __init__ (self):
       self.fenster = Tk()
       self.fenster.title("Telemanager")
       self.label = Label(master=self.fenster,
                       text='Dein Telemanager!', font=('Arial', 22))
       self.bild = PhotoImage(file='telefon.gif')
       self.bildflaeche = Label(master=self.fenster,
                             image=self.bild)
       self.label1 = Label(master=self.fenster,
                        text='Name:', font=('Arial', 15))
       self.name = Entry(master=self.fenster,bg='white')
       self.label2 = Label(master=self.fenster,
                        text='Nummer:',font=('Arial', 15))
       self.nummer = Entry(master=self.fenster,bg='white')
       self.button = Button(master=self.fenster,width='15',
                        text='Zur Liste hinzufügen',font=('Arial', 15),
                        command=eintrag)
       self.button1 = Button(master=self.fenster,width='15',
                          text='Liste anzeigen',font=('Arial', 15),
                          command=anzeigen)
       self.button2 = Button(master=self.fenster,
                          text='By,By',font=('Arial', 15),
                          command=beenden)
                       
       self.label.grid(column=4,row=1,pady =5)
       self.bildflaeche.grid(column=1,row=1,pady=5)
       self.label1.grid(column=1,row=2,pady=5)
       self.name.grid(column=2,row=2,pady=5,padx=5)
       self.label2.grid(column=1,row=3,pady=5,padx=5)
       self.nummer.grid(column=2,row=3,pady=5,padx=5)
       self.button.grid(column=1,row=4,pady=5,padx=5)
       self.button1.grid(column=1,row=5,pady=5,padx=5)
       self.button2.grid(column=5,row=5,pady=5,padx=5)
       self.fenster.mainloop()







       


#Funktionen#####################################################################


def eintrag():
	tkMessageBox.showinfo(title='Info',message='Noch keine Funktion vorhanden!')
  
    


def anzeigen():
	tkMessageBox.showinfo(title='Info',message='Noch keine Funktion vorhanden!')



def beenden():
	if tkMessageBox.askyesno(title='Beenden',message='Wirklich beenden?'):
		self.fenster.destroy()


telemanager = Telemanager()
Hier die Fehlermeldung!

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1406, in __call__
    return self.func(*args)
  File "/home/joerg/bin/python/telemanager/telemanagergui.py", line 73, in beenden
    self.fenster.destroy()
NameError: global name 'self' is not defined
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

was soll denn self an dieser Stelle sein? 'beenden' ist eine ganz normale Funktion, die nichts davon weiss, dass du irgenwo eine Klasse geschrieben hast und da das ReferenzArgument "self" genannt hast.
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
BlackJack

@prachtschmerle: Falls Du noch keine Erfahrung mit objektorientierter Programmierung (OOP) haben solltest, dann lass am besten erst einmal die Finger von GUI-Programmierung. OOP ist in der Regel Voraussetzung dafür.
prachtschmerle
User
Beiträge: 2
Registriert: Mittwoch 23. Januar 2008, 17:50

Habe den code geändert,soweit funkt's.Muß nur noch eine Sortierfunktion einbauen.Werde mich wohl mit der "Objektorientierten Python-Programmierung" beschäftigen müssen.Das passende Buch von Michael Weigend habe ich mir gekauft.

Code: Alles auswählen

import pickle
import os
import tkMessageBox
from Tkinter import *


def schreiben():
    global vorname, nachname, nummer, anzeige
    datei = file('tele.txt', 'a+')
    eintrag = vorname.get() + "--" + nachname.get() + "----------" + nummer.get()
    if eintrag:
        pickle.dump(eintrag, datei)
        anzeige.config(text='Daten wurden eingetragen!')
def neu():
    global vorname, nachname, nummer, anzeige
    anzeige.config(text='Neue Nummer!')
    vorname.delete(0, END)
    nachname.delete(0, END)
    nummer.delete(0, END)
    
def sortieren():
    pass
    
    

        
def editor():
    fenster = Toplevel()
    fenster.title('Telefonbuch')
    frame = Frame(fenster)
    frame.pack(side=TOP)
    bild = PhotoImage(file='telefon1.gif')
    bildflaeche = Label(frame,image=bild)
    bildflaeche.pack(side=LEFT)
    label = Label(frame,
                  text='Telefonbuch',font=('Arial', 20))
    label.pack(side=LEFT)
    frame1 = Frame(fenster)
    frame1.pack(side=TOP)
    scrollbar = Scrollbar(frame1)
    scrollbar.pack(side =RIGHT,fill =Y)
    text = Text(frame1,height=25,width=40,bg='white',wrap=WORD,font=('Arial', 14),
                yscrollcommand=scrollbar.set)
    text.pack(expand=1)
    scrollbar.config(command=text.yview)
    daten = file('tele.txt')
    if daten:
        text.insert(1.0, daten.read())
        
        
        
    fenster.mainloop()       
            

    


def hauptfenster():
    global vorname, nachname, nummer, anzeige 
    fenster = Tk()
    fenster.title('Telemanager')
    frame1 = Frame(fenster)
    frame1.pack(side=TOP,pady=5)
    bild = PhotoImage(file='telefon.gif')
    bildflaeche = Label(frame1,image=bild)
    bildflaeche.pack(side=LEFT)
    label1 = Label(frame1,
                   text='Dein Telemanager!!!',font=('Arial', 20))
    label1.pack(side=LEFT)
    frame2 = Frame(fenster)
    frame2.pack(side=TOP,pady=5)
    label2 = Label(frame2,width='15',
                   text='Vorname:',font=('Arial', 11))
    label2.pack(side=LEFT)
    vorname = Entry(frame2,bg='white')
    vorname.pack(side=LEFT)
    frame3 = Frame(fenster)
    frame3.pack(side=TOP,pady=5)
    label3 = Label(frame3,width='15',
                   text='Nachname:',font=('Arial', 11))
    label3.pack(side=LEFT)
    nachname = Entry(frame3,bg='white')
    nachname.pack(side=LEFT)
    frame4 = Frame(fenster)
    frame4.pack(side=TOP,pady=5)
    label4 = Label(frame4,width='15',
                   text='Tel.Nr.:',font=('Arial', 11))
    label4.pack(side=LEFT)
    nummer = Entry(frame4,bg='white')
    nummer.pack(side=LEFT)
    frame5 = Frame(fenster)
    frame5.pack(side=TOP,pady=5)
    button3 = Button(frame5,
                     text='Neu',bg='orange',font=('Arial', 11),
                     command=neu)
    button3.pack(side=LEFT)
    frame6 = Frame(fenster)
    frame6.pack(side=TOP)
    button1 = Button(frame6,
                     text='Eintragen',font=('Arial', 11),
                     command=schreiben)
    button1.pack(side=LEFT,padx=5)
    button2 = Button(frame6,
                     text='Anzeigen',font=('Arial', 11),
                     command=editor)
    button2.pack(side=LEFT,padx=5)
    anzeige = Label(frame5,width='23')
    anzeige.pack(side=LEFT)
    button4 = Button(frame6,
                     text='Sortieren',font=('Arial', 11),
                     command=sortieren)
    button4.pack(side=LEFT,padx=5)
    
    
    
    fenster.mainloop()



hauptfenster()
Antworten