HOWTO · Tkinter
Wie man den Inhalt des Tkinter-Textfelds löscht
Erfahren Sie, wie Sie ein Tkinter-Text-Widget mit delete leeren, einen Bereich oder eine Auswahl entfernen und seinen Inhalt vor dem Löschen überprüfen.
Auf dieser Seite
Um ein Tkinter-Text-Widget zu leeren, rufen Sie seine Methode delete mit dem ersten Textindex und dem Endindex auf: text_box.delete("1.0", "end"). Der erste Index, 1.0, ist der Anfang der ersten Zeile. Tkinter behält intern einen erforderlichen abschließenden Zeilenumbruch bei, sodass das Löschen bis end den gesamten eingegebenen Text entfernt.
Gesamten Text aus einem Tkinter-Text-Widget löschen
Verwenden Sie text_box.delete("1.0", "end"), um den eingegebenen Text zu entfernen. Der Index 1.0 markiert den Anfang der ersten Zeile, und end reicht bis zum Sentinel für den abschließenden Zeilenumbruch von Tkinter. Das folgende Beispiel ohne grafische Oberfläche verwendet einen kleinen Platzhalter, um den Aufruf und den resultierenden Inhalt zu demonstrieren, ohne ein Fenster zu öffnen:
class TextBox:
def __init__(self, content):
self.content = content
def delete(self, start, end):
if start == "1.0" and end == "end":
self.content = ""
text_box = TextBox("Draft text")
text_box.delete("1.0", "end")
print("Cleared" if text_box.content == "" else "Still has text")
Cleared
Setzen Sie in einer GUI text_box auf ein tk.Text-Widget und rufen Sie dieselbe Methode delete("1.0", "end") aus einem Button-Callback auf. Diese GUI-Version benötigt eine grafische Anzeige und wird hier daher nicht als ausgeführtes Beispiel gezeigt.
"1.0" und "end" beziehen sich auf das erste Zeichen und das letzte Zeichen des Inhalts im Text-Widget, so wie im Artikel von wie man die Eingabe des Text-Widgets erhält eingeführt.
Einen Bereich oder ein einzelnes Zeichen löschen
Text.delete(index1, index2=None) entfernt Text ab index1 und, falls angegeben, weiter bis zu, aber nicht einschließlich, index2. Textindizes verwenden die Form line.character; Zeilen beginnen bei 1 und Zeichenpositionen bei 0. Beispielsweise entfernt text_box.delete("2.0", "3.0") den Text in Zeile 2 bis zum Anfang von Zeile 3. Mit einem einzigen Index, wie text_box.delete("2.0"), löscht Tkinter das Zeichen an dieser Position. Der Index end bezeichnet die Position nach dem abschließenden Zeilenumbruch des Widgets, weshalb er den gesamten eingegebenen Text löscht.
Ausgewählten Text sicher löschen
tk.SEL_FIRST und tk.SEL_LAST identifizieren den ausgewählten Bereich, aber ihre Verwendung, wenn keine Auswahl vorhanden ist, kann tk.TclError auslösen. Prüfen Sie vor dem Löschen auf das Tag sel: if text_box.tag_ranges("sel"): und rufen Sie dann text_box.delete(tk.SEL_FIRST, tk.SEL_LAST) auf. Der Endindex der Auswahl ist exklusiv, sodass dies den ausgewählten Text entfernt, ohne das unmittelbar folgende Zeichen zu löschen. Wenn das Tag sel keine Bereiche hat, tut der geschützte Block nichts.
Text bedingt löschen
Um nur zu löschen, wenn das Widget vom Benutzer eingegebene Zeichen enthält, rufen Sie den Inhalt bis end-1c ab, was den abschließenden Zeilenumbruch von Tkinter ausschließt. Eine leere Zeichenkette bedeutet, dass keine eingegebenen Zeichen vorhanden sind; Leerzeichen und Tabulatoren zählen weiterhin als Inhalt. Beispielsweise ist if text_box.get("1.0", "end-1c"): für jeden nicht leeren Inhalt wahr, einschließlich Leerraum. Fügen Sie text_box.delete("1.0", "end") in diesen Zweig ein, um ihn zu löschen. Wenn Inhalt, der nur aus Leerraum besteht, in Ihrer Anwendung als leer gelten soll, testen Sie stattdessen text_box.get("1.0", "end-1c").strip(); das behandelt Leerzeichen und Tabulatoren ebenfalls als leer.