Probleme mit get

Fragen zu Tkinter.
Antworten
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

Hallo zusammen,

wollte mit Tkinter einen Wizard schreiben, der Daten sammelt und diese dann letztlich in eine Datei speichert.

Nun habe ich bereits zu Beginn das Problem, dass die Texteinträge nicht abrufbar sind. Es heißt immer wieder, dass ein NoneType - Objekt keine insert() - Methode besitzt.

Die insert() - Methode habe ich nur in den Code eingefügt, um festzustellen, wo die Variable noch gesetzt ist - offensichtlich gleich danach nicht mehr :-(

Warum wird self.Titel = Entry(...) nicht gesetzt?

Code: Alles auswählen

class Artikeldaten(object):
    def __init__(self):
        self.Titel = "" #StringVar()
        self.Published = "" #StringVar()
        self.Autor = "" #StringVar()
        self.Status = "" #StringVar()
        self.Teaser = "" #StringVar()
        self.Text = "" #StringVar()
        self.Bilder = []


class App(object):

    def __init__(self, master, Artikel):
        master.title("Schritt 1 - neuer Artikel")
        self.Artikel = Artikel

        frame = Frame(master, width=600, height=600, borderwidth = 1)
        frame.pack()
        self.createWidgets_step1(frame)

    def back(self):
        pass

    def nextstep(self):
        self.Artikel.Titel = self.Titel.get()
        self.Artikel.Autor = self.Autor.get()
        self.Artikel.Status = self.Status.get()
        
    def createWidgets_step1(self, frame):
        self.Lbls = [] # alle Labels werden hier gesammelt

        self.Titel = Entry(frame, width=50).grid(row=0, column=1)
        self.Titel.insert("ASDFFEW")
        self.Lbls.append( Label(frame, text="Titel").grid(row=0) )
        HILFE="Hilfe: Der Titel des Artikels"
        self.Lbls.append( Label(frame, text=HILFE).grid(row=1, column=1) )
        print self.Titel.get()

        self.Autor = Entry(frame, width=50).grid(row=2, column=1)
        self.Lbls.append( Label(frame, text="Autor").grid(row=2) )
        HILFE="Hilfe: Der Autor im Format 'j. sedlak'"
        self.Lbls.append( Label(frame, text=HILFE).grid(row=3, column=1) )

        self.Status = Entry(frame, width=50).grid(row=4, column=1)
        self.Lbls.append( Label(frame, text="Status").grid(row=4) )
        HILFE="Hilfe: Der Status kann entweder v (=visible) oder das Ennddatum im Format YYYYMMDD enthalten"
        self.Lbls.append(Label(frame, text=HILFE).grid(row=5, column=1) )

        self.Back = Button(frame, text="Zurück <<", command=self.back)
        self.Back.grid(row=6)

        self.Weiter = Button(frame, text="Weiter >>", command=self.nextstep)
        self.Weiter.grid(row=6, column=1)

        self.Abbruch = Button(frame, text="Abbruch", command=frame.quit)
        self.Abbruch.grid(row=6, column=2)

    def destroyWidgets_step1(self,frame):
        self.Lbls = None
        self.Titel = None
        self.Autor = None
        self.Status = None


root = Tk()
app = App(root, Artikeldaten())
root.mainloop()
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

sedi hat geschrieben:Warum wird self.Titel = Entry(...) nicht gesetzt?
Du erzeugst zwar eine Entry-Instanz, bindest aber nicht diese - wie beabsichtigt - an einen Namen, sondern den Rückgabewert der aufgerufenen grid()-Methode, und die liefert None zurück ...
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

uups - waaaahnsinn, oft durchgelesen und den Fehler nicht erkannt!

Vielen, vielen Dank für die prompte Nachricht!
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Antworten