HOWTO · Tkinter

Comment supprimer le contenu de la boîte de texte Tkinter

Apprenez à effacer un widget Text Tkinter avec delete, à supprimer une plage ou une sélection et à vérifier son contenu avant de l'effacer.

Sur cette page

Pour effacer un widget Text de Tkinter, appelez sa méthode delete avec le premier indice de texte et l’indice de fin : text_box.delete("1.0", "end"). Le premier indice, 1.0, est le début de la première ligne. Tkinter conserve en interne un saut de ligne final requis, donc supprimer jusqu’à end supprime tout le texte saisi.

Effacer tout le texte d’un widget Text de Tkinter

Utilisez text_box.delete("1.0", "end") pour supprimer le texte saisi. L’indice 1.0 marque le début de la première ligne, et end atteint la sentinelle du saut de ligne final de Tkinter. L’exemple sans interface graphique suivant utilise un petit substitut pour démontrer l’appel et le contenu résultant sans ouvrir de fenêtre :

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

Dans une interface graphique, définissez text_box comme un widget tk.Text et appelez la même méthode delete("1.0", "end") depuis le rappel d’un bouton. Cette version avec interface graphique nécessite un affichage graphique, elle n’est donc pas présentée ici comme un exemple exécuté.

"1.0" et "end" font référence au premier caractère et au dernier caractère du contenu du widget Text, comme cela a été introduit dans l’article de comment obtenir l’entrée du widget Text.

Supprimer une plage ou un seul caractère

Text.delete(index1, index2=None) supprime le texte à partir de index1 et, lorsqu’il est fourni, continue jusqu’à index2, sans l’inclure. Les indices de texte utilisent la forme line.character ; les lignes commencent à 1 et les positions des caractères à 0. Par exemple, text_box.delete("2.0", "3.0") supprime le texte de la ligne 2 jusqu’au début de la ligne 3. Avec un seul indice, comme text_box.delete("2.0"), Tkinter supprime le caractère à cette position. L’indice end désigne la position après le saut de ligne final du widget, ce qui explique pourquoi il efface tout le texte saisi.

Supprimer le texte sélectionné en toute sécurité

tk.SEL_FIRST et tk.SEL_LAST identifient la plage sélectionnée, mais les utiliser lorsqu’aucune sélection n’existe peut lever tk.TclError. Vérifiez la balise sel avant de supprimer : if text_box.tag_ranges("sel"): puis appelez text_box.delete(tk.SEL_FIRST, tk.SEL_LAST). L’indice de fin de la sélection est exclusif, donc cela supprime le texte sélectionné sans supprimer le caractère qui le suit immédiatement. Lorsque la balise sel n’a aucune plage, le bloc protégé ne fait rien.

Effacer le widget de zone de texte Tkinter - Suppression du texte sélectionné

Effacer le texte sous condition

Pour n’effacer que lorsque le widget contient des caractères saisis par l’utilisateur, récupérez le contenu jusqu’à end-1c, qui exclut le saut de ligne final de Tkinter. Une chaîne vide signifie qu’il n’y a aucun caractère saisi ; les espaces et les tabulations comptent toujours comme du contenu. Par exemple, if text_box.get("1.0", "end-1c"): est vrai pour tout contenu non vide, y compris les espaces blancs. Placez text_box.delete("1.0", "end") dans cette branche pour l’effacer. Si un contenu composé uniquement d’espaces blancs doit compter comme vide dans votre application, testez plutôt text_box.get("1.0", "end-1c").strip() ; cela traite aussi les espaces et les tabulations comme vides.

Effacer le widget de zone de texte Tkinter - Suppression du texte par programmation