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 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.