Seite 1 von 1

Fehlermeldung bei Klick auf Button?

Verfasst: Mittwoch 23. Januar 2008, 18:13
von prachtschmerle
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

Verfasst: Mittwoch 23. Januar 2008, 18:30
von Nikolas
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.

Verfasst: Mittwoch 23. Januar 2008, 18:48
von 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.

Verfasst: Montag 28. Januar 2008, 13:16
von prachtschmerle
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()