Mit Button-Methode in Textfeld schreiben

Fragen zu Tkinter.
Antworten
caiusjuliuscaesar
User
Beiträge: 7
Registriert: Sonntag 3. September 2017, 12:00

Hallo,
(ich bin natürlich Anfänger, aber wo liegt der Fehler?)

Ich habe eine Klasse, die einen Dialog mit Tkinter aufblenden soll. Bei jedem Buttonclick soll etwas in ein Textfeld geschrieben werden. Ich habs mal so versucht:

Code: Alles auswählen

import tkinter as tk
from tkinter import *

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()

        self.btn = tk.Button(self)
        self.btn["text"] = "Start"
        self.btn["command"] = self.report()
        self.btn.pack(side="right")

        self.btnQuit = tk.Button(self, text="QUIT", fg="red",command=root.destroy)
        self.btnQuit.pack(side="right")

        self.tB = Text()
        self.tB.insert(END, "Gurkensalat\nCurrywurst\nPommes\n")
        self.tB.pack(side="right")

    def report(self):
        self.tB.insert(END, "Just a text Widget\nin two lines\n")
        

root = tk.Tk()
app = Application(master=root)
app.mainloop()
Bei Buttoncklick wird also die Methode report() aufgerufen. Diese kennt aber, obwohl Memberfunktion der Klasse, das Textfeld tB nicht.
Fehlermeldung:
line 25, in report self.tB.insert(END, "Just a text Widget\nin two lines\n")
AttributeError: 'Application' object has no attribute 'tB'
Wo liegt hier der Fehler bzw. was kann man tun?

Gruß, CJC
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

self.report() wird bereits in Zeile 11 aufgerufen, zu dem Zeitpunkt ist self.tB aber noch nicht definiert. Der Fehler ist der Aufruf (also die Klammern), du darfst nur die Methode selbst zuweisen. Zeile 2 solltest Du entfernen und den Code entsprechend anpassen.
caiusjuliuscaesar
User
Beiträge: 7
Registriert: Sonntag 3. September 2017, 12:00

Der Wahnsinn!!

Danke!!!
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

caiusjuliuscaesar hat geschrieben:Hallo,
(ich bin natürlich Anfänger, aber wo liegt der Fehler?)
Hast Du schon richtig kapiert, was kbr geschrieben hatte? Die Methode zuweisen aber nicht aufrufen. Beim Aufrufen kennt sie nicht tB. Aber was noch wichtiger ist. Da es keinen Returnwert gibt, ist der Returnwert 'none'. was willst Du mit einem command auf 'none'?
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Warum so grantig?
Antworten