Löschen des Textes in einem Textfeld

Fragen zu Tkinter.
Antworten
flasche_chris
User
Beiträge: 3
Registriert: Montag 20. Februar 2023, 11:58

Hallo, ich wieder xD

Ich habe ein einfaches Programm welches ein Textfeld hat und ein Button womit sich der Text löschen lassen soll.

Klingt jetzt nicht spektakulär aber erfüllt mein Zweck um Text kurz abzulegen ohne ihn speichern. Jedoch lässt sich der Text nicht löschen obwohl der Code meiner Meinung nach normal ist.

Code:

Code: Alles auswählen

from tkinter import *

def clear_pad():
    global big_field
    big_field.delete("0.0", END)

window = Tk()
window.title("QuickPad")

big_field = Text(master=window, height=50, width=120).pack()
button_clr = Button(master=window, text="✕", command=clear_pad).pack()

window.mainloop()

Geschrieben und ausgeführt wurde an einem Mac mit VS Code, als Interpreter kam Python 3.10.1 zum Einsatz und anbei die Fehlermeldung:

Code: Alles auswählen

(base) christian@MacBook-Air ~ % /usr/local/bin/python3 /Users/christian/PythonProjects/Text-Quick/textquick.py
Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
    return self.func(*args)
  File "/Users/christian/PythonProjects/Text-Quick/textquick.py", line 5, in clear_pad
    big_field.delete("0.0", END)
AttributeError: 'NoneType' object has no attribute 'delete'
(base) christian@MacBook-Air ~ % 
Es wäre echt schön wenn mich jemand aufklären könnte, was ich genau falsch gemacht habe.

Danke schonmal im Voraus.

Bis denn

Eure Flasche
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Der Fehler besagt, dass die Variable `big_field` den Wert None enthält. Was auch klar ist, denn `pack` hat keinen Rückgabewert.

*-Importe benutzt man nicht. Globale Variablen benutzt man nicht.

Code: Alles auswählen

import tkinter as tk
from functools import partial

def clear_pad(big_field):
    big_field.delete("0.0", tk.END)

def main():
    window = tk.Tk()
    window.title("QuickPad")

    big_field = tk.Text(master=window, height=50, width=120)
    big_field.pack()
    tk.Button(master=window, text="✕", command=partial(clear_pad, big_field)).pack()
    
    window.mainloop()


if __name__ == "__main__":
    main()
flasche_chris
User
Beiträge: 3
Registriert: Montag 20. Februar 2023, 11:58

Alles klar...

Danke
Antworten