Problem mit get()

Fragen zu Tkinter.
Antworten
Hanman
User
Beiträge: 48
Registriert: Mittwoch 31. März 2004, 12:24
Kontaktdaten:

Hallo,
ich habe wieder ein kleines Problem mit get () :

Code: Alles auswählen

    def addlink(self) :
        #Neues Fenster :
        self.root = Tk()
        self.fenster = Frame
        self.root.title("Linkhinzufügen")
        self.xpos = 60
        self.ypos = 60
        self.width = 210
        self.height = 100
        self.root.wm_geometry("%dx%d+%d+%d" % (self.width,self.height,self.xpos,self.ypos))
        #Labels :
        Label(self.root, text="Name : ").grid(row=1,column=1)
        Label(self.root, text="Beschreibung : ").grid(row=2,column=1)
        Label(self.root, text="URL : ").grid(row=3,column=1)
        #Entrys :
        global linkname
        global linkdesc
        global linkurl

        linkname = Entry(self.root).grid(row=1, column=2)
        linkdesc = Entry(self.root).grid(row=2, column=2)
        linkurl = Entry(self.root).grid(row=3, column=2)

        #Speicher Button
        self.savebutt=Button(self.root, text="Speichern", command=self.savelink).grid(row=4,column=1)

    def savelink(self) :
        self.oeffnen = open("links.xml", "a")
        self.holen = linkname.get()
        self.holen2 = linkdesc.get()
        self.holen3 = linkurl.get()
        self.oeffnen.write(self.holen)
        self.oeffnen.write(self.holen2)
        self.oeffnen.write(self.holen3)
Wenn ich dieses Code ausführe, bekomme ich immer diese Fehlermeldung :
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\PYTHON23\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "C:\WINDOWS\Desktop\python\html\news4.py", line 143, in savelink
self.holen = linkname.get()
AttributeError: 'NoneType' object has no attribute 'get'
Weiß jemand woran das liegen könnte?

Gruß Hanman[/quote][/code]
'Ich liebe es wenn ein Plan funktioniert'
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Ich glaube, du hast noch nicht groß mit Funktionen/Methoden gearbeitet. Du machst die entscheidenen Fehler in den Zeilen hier:

Code: Alles auswählen

        linkname = Entry(self.root).grid(row=1, column=2) 
        linkdesc = Entry(self.root).grid(row=2, column=2) 
        linkurl = Entry(self.root).grid(row=3, column=2)
So ist Entry eine Funktion und gibt dir ein Tk-Widget zurück, dass du behandeln kannst. Damit es sichtbar wird, willst du es gridden. Soweit so gut. Nun ist ".grid" aber eine Methode des Widgets, die zwar etwas macht, aber nix zurückgibt (==Prozedur). Also wird linkname None zugewiesen, weil nach deinem Code ist das das Ergebnis aus dem gridden, während das eben gebildete Widget nicht gespeichert und somit nicht mehr ansprechbar ist. Mach also zwei Schritte daraus, dann klappt es.

Code: Alles auswählen

linkname=Entry(self.root)
linkname.grid(row=1,column=2)
Es geht auch in einem Schritt, indem man ein Dict mit den Gridoptionen übergibt, aber ich hab dne Optionsname leider vergessen.

hth,
Milan
Antworten