Seite 1 von 1

Löschen des Textes in einem Textfeld

Verfasst: Samstag 25. Februar 2023, 21:19
von flasche_chris
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

Re: Löschen des Textes in einem Textfeld

Verfasst: Samstag 25. Februar 2023, 21:29
von Sirius3
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()

Re: Löschen des Textes in einem Textfeld

Verfasst: Samstag 25. Februar 2023, 21:31
von flasche_chris
Alles klar...

Danke