HOWTO · Tkinter

Come eliminare i contenuti della casella di testo Tkinter

Scopri come cancellare un widget Text di Tkinter con delete, rimuovere un intervallo o una selezione e controllare il suo contenuto prima di cancellarlo.

In questa pagina

Per cancellare un widget Text di Tkinter, chiama il suo metodo delete con il primo indice di testo e l’indice finale: text_box.delete("1.0", "end"). Il primo indice, 1.0, è l’inizio della prima riga. Tkinter mantiene internamente un carattere di nuova riga finale obbligatorio, quindi eliminare fino a end rimuove tutto il testo inserito.

Cancellare tutto il testo da un widget Text di Tkinter

Usa text_box.delete("1.0", "end") per rimuovere il testo inserito. L’indice 1.0 segna l’inizio della prima riga e end raggiunge la sentinella del carattere di nuova riga finale di Tkinter. L’esempio headless seguente usa un piccolo sostituto per dimostrare la chiamata e il contenuto risultante senza aprire una finestra:

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

In una GUI, imposta text_box su un widget tk.Text e chiama lo stesso metodo delete("1.0", "end") dalla callback di un pulsante. Quella versione GUI richiede un display grafico, quindi non è mostrata qui come esempio eseguito.

"1.0" e "end" si riferiscono al primo carattere e all’ultimo carattere dei contenuti nel widget Text, lo stesso introdotto nell’articolo di come ottenere l’input del widget Text.

Eliminare un intervallo o un singolo carattere

Text.delete(index1, index2=None) rimuove il testo a partire da index1 e, quando fornito, continua fino a index2 escluso. Gli indici di testo usano la forma line.character; le righe iniziano da 1 e le posizioni dei caratteri da 0. Ad esempio, text_box.delete("2.0", "3.0") rimuove il testo della riga 2 fino all’inizio della riga 3. Con un solo indice, come text_box.delete("2.0"), Tkinter elimina il carattere in quella posizione. L’indice end si riferisce alla posizione dopo il carattere di nuova riga finale del widget, ed è per questo che cancella tutto il testo inserito.

Eliminare il testo selezionato in modo sicuro

tk.SEL_FIRST e tk.SEL_LAST identificano l’intervallo selezionato, ma usarli quando non esiste alcuna selezione può sollevare tk.TclError. Controlla il tag sel prima di eliminare: if text_box.tag_ranges("sel"): quindi chiama text_box.delete(tk.SEL_FIRST, tk.SEL_LAST). L’indice finale della selezione è esclusivo, quindi questo rimuove il testo selezionato senza eliminare il carattere immediatamente successivo. Quando il tag sel non ha intervalli, il blocco protetto non fa nulla.

Cancellare il widget casella di testo Tkinter - Eliminazione del testo selezionato

Cancellare il testo in modo condizionale

Per cancellare solo quando il widget contiene caratteri inseriti dall’utente, recupera il contenuto fino a end-1c, che esclude il carattere di nuova riga finale di Tkinter. Una stringa vuota significa che non ci sono caratteri inseriti; gli spazi e le tabulazioni contano comunque come contenuto. Ad esempio, if text_box.get("1.0", "end-1c"): è vero per qualsiasi contenuto non vuoto, compresi gli spazi bianchi. Inserisci text_box.delete("1.0", "end") in quel ramo per cancellarlo. Se nella tua applicazione un contenuto di soli spazi bianchi deve contare come vuoto, testa invece text_box.get("1.0", "end-1c").strip(); anche questo tratta spazi e tabulazioni come vuoti.

Cancellare il widget casella di testo Tkinter - Eliminazione del testo a livello di codice