Python

Guide complet sur tkinter Multiline Entry

Tkinter est une bibliothèque Python populaire pour créer des interfaces graphiques utilisateur (GUI). L’un des widgets les plus utilisés dans Tkinter est l’entrée (Entry), qui permet à l’utilisateur de saisir du texte. Cependant, il existe des cas où un champ de texte unique ne suffit pas, notamment lorsque l’utilisateur doit saisir du texte sur plusieurs lignes. C’est là qu’intervient le widget Multiline Entry de Tkinter.

Dans ce guide complet, nous allons explorer en détail le Multiline Entry de Tkinter, découvrir comment l’utiliser efficacement et discuter des différentes fonctionnalités qu’il offre.

Qu’est-ce que le Multiline Entry ?

Le Multiline Entry, également connu sous le nom de Text, est un widget Tkinter qui permet à l’utilisateur de saisir et de visualiser du texte sur plusieurs lignes. Contrairement à l’entrée standard, qui ne prend en charge que le texte sur une seule ligne, le Multiline Entry est adapté pour les cas où des paragraphes ou des blocs de texte doivent être saisis.

Utilisation de Multiline Entry dans Tkinter

Voici un exemple simple de création d’un Multiline Entry dans Tkinter :

import tkinter as tk

# Créer une fenêtre
root = tk.Tk()
root.geometry("400x300")

# Créer un Multiline Entry
multiline_entry = tk.Text(root)
multiline_entry.pack(expand=True, fill="both")

# Exécuter la boucle principale
root.mainloop()

Dans cet exemple, nous avons importé le module tkinter et créé une fenêtre principale. Ensuite, nous avons créé un widget Text (Multiline Entry) et l’avons emballé dans la fenêtre principale en utilisant la méthode pack(). Enfin, nous avons démarré la boucle principale de l’application.

Fonctionnalités du Multiline Entry

Le Multiline Entry offre plusieurs fonctionnalités utiles pour la saisie et la manipulation de texte :

  1. Saisie et édition de texte : Les utilisateurs peuvent saisir et éditer du texte sur plusieurs lignes à l’aide du clavier.
  2. Sélection de texte : Les utilisateurs peuvent sélectionner du texte en maintenant le bouton de la souris enfoncé et en faisant glisser le curseur.
  3. Couper, copier et coller : Les utilisateurs peuvent couper, copier et coller du texte à l’aide des commandes du menu contextuel ou des raccourcis clavier.
  4. Défilement vertical : Si le contenu dépasse la taille du widget, un défilement vertical automatique est activé pour permettre à l’utilisateur de visualiser tout le contenu.
  5. Mise en forme du texte : Il est possible d’appliquer des mises en forme au texte, comme le changement de police, la taille de la police, la couleur, etc.

Voici quelques ⭐ exemples pratiques ⭐ d’utilisation du Multiline Entry dans Tkinter :

1. Éditeur de texte simple
import tkinter as tk

def sauvegarder():
    texte = text_widget.get("1.0", tk.END)
    with open("document.txt", "w") as f:
        f.write(texte)

root = tk.Tk()
root.title("Éditeur de texte")

text_widget = tk.Text(root)
text_widget.pack(expand=True, fill="both")

bouton_sauvegarder = tk.Button(root, text="Sauvegarder", command=sauvegarder)
bouton_sauvegarder.pack()

root.mainloop()

Ce code crée une fenêtre d’éditeur de texte simple où l’utilisateur peut saisir et éditer du texte sur plusieurs lignes. Il y a un bouton “Sauvegarder” qui sauvegarde le contenu du Multiline Entry dans un fichier texte.

2. Bloc-notes simple
import tkinter as tk

def ouvrir_fichier():
    with open("document.txt", "r") as f:
        contenu = f.read()
    text_widget.delete("1.0", tk.END)
    text_widget.insert(tk.END, contenu)

root = tk.Tk()
root.title("Bloc-notes")

text_widget = tk.Text(root)
text_widget.pack(expand=True, fill="both")

bouton_ouvrir = tk.Button(root, text="Ouvrir fichier", command=ouvrir_fichier)
bouton_ouvrir.pack()

root.mainloop()

Ce code crée une application de bloc-notes simple où l’utilisateur peut ouvrir un fichier texte existant et voir son contenu dans le Multiline Entry.

3. Application de chat
import tkinter as tk

def envoyer_message():
    message = entry.get()
    text_widget.insert(tk.END, "Moi : " + message + "\n")
    entry.delete(0, tk.END)

root = tk.Tk()
root.title("Chat")

text_widget = tk.Text(root)
text_widget.pack(expand=True, fill="both")

entry = tk.Entry(root)
entry.pack(fill="x")

bouton_envoyer = tk.Button(root, text="Envoyer", command=envoyer_message)
bouton_envoyer.pack()

root.mainloop()

Ce code crée une application de chat simple où l’utilisateur peut saisir des messages dans un champ d’entrée (Entry) et les afficher dans le Multiline Entry.

Voici quelques ⭐ exemples avancés ⭐ d’utilisation du Multiline Entry dans Tkinter :

1. Éditeur de code avec coloration syntaxique
import tkinter as tk
import tkinter.scrolledtext as scrolledtext
import keyword

def colorer_syntaxe(event=None):
    for mot in keyword.kwlist:
        text_widget.tag_configure(mot, foreground="blue")

    ligne_debut = 1
    ligne_fin = int(text_widget.index("end-1c").split(".")[0]) + 1

    for i in range(ligne_debut, ligne_fin):
        ligne = text_widget.get(f"{i}.0", f"{i}.end-1c")
        for mot in ligne.split():
            if mot in keyword.kwlist:
                text_widget.tag_add(mot, f"{i}.{ligne.index(mot)}", f"{i}.{ligne.index(mot) + len(mot)}")

root = tk.Tk()
root.title("Éditeur de code")

text_widget = scrolledtext.ScrolledText(root, wrap=tk.WORD)
text_widget.pack(expand=True, fill="both")

text_widget.bind("<KeyRelease>", colorer_syntaxe)

root.mainloop()

Ce code crée un éditeur de code avec coloration syntaxique rudimentaire. Il utilise le Multiline Entry pour afficher le code, et chaque mot-clé Python est coloré en bleu.

2. Carnet de notes avec recherche
import tkinter as tk
import tkinter.scrolledtext as scrolledtext

def rechercher_mot():
    mot_cle = entry_mot_cle.get()
    texte = text_widget.get("1.0", tk.END)
    occurences = texte.lower().count(mot_cle.lower())
    label_resultat.config(text=f"Occurrences de '{mot_cle}': {occurences}")

root = tk.Tk()
root.title("Carnet de notes")

text_widget = scrolledtext.ScrolledText(root, wrap=tk.WORD)
text_widget.pack(expand=True, fill="both")

frame_recherche = tk.Frame(root)
frame_recherche.pack(fill="x")

label_mot_cle = tk.Label(frame_recherche, text="Mot clé :")
label_mot_cle.pack(side="left")

entry_mot_cle = tk.Entry(frame_recherche)
entry_mot_cle.pack(side="left", expand=True, fill="x")

bouton_rechercher = tk.Button(frame_recherche, text="Rechercher", command=rechercher_mot)
bouton_rechercher.pack(side="left")

label_resultat = tk.Label(root, text="")
label_resultat.pack()

root.mainloop()

Ce code crée un carnet de notes où l’utilisateur peut saisir du texte dans le Multiline Entry. Il y a également un champ de recherche où l’utilisateur peut saisir un mot-clé et rechercher le nombre d’occurrences de ce mot-clé dans le texte. Le résultat est affiché sous forme d’étiquette.

💡 L’utilisation technique du Multiline Entry dans Tkinter : Cas Particuliers

Gestion des événements clavier

Le Multiline Entry peut être utilisé pour capturer et gérer les événements clavier, tels que les touches de raccourci ou les séquences spéciales. Par exemple, voici comment détecter lorsque l’utilisateur appuie sur la touche Entrée pour soumettre un formulaire :

def soumettre_formulaire(event):
    if event.keysym == "Return":
        # Logique pour soumettre le formulaire
        pass

text_widget.bind("<KeyPress>", soumettre_formulaire)
Personnalisation des menus contextuels

Tkinter permet de créer des menus contextuels personnalisés qui peuvent être associés au Multiline Entry. Vous pouvez ajouter des commandes de menu pour des actions telles que copier, couper, coller, annuler, rétablir, etc. Voici un exemple d’ajout de commandes de menu contextuel :

menu_contextuel = tk.Menu(text_widget, tearoff=0)
menu_contextuel.add_command(label="Couper", command=couper_texte)
menu_contextuel.add_command(label="Copier", command=copier_texte)
menu_contextuel.add_command(label="Coller", command=coller_texte)
text_widget.bind("<Button-3>", afficher_menu_contextuel)
Mise en forme avancée du texte

Le Multiline Entry prend en charge la mise en forme avancée du texte, y compris la modification de la police, de la taille de la police, de la couleur du texte et du fond, ainsi que l’ajout de styles comme le gras, l’italique, le souligné, etc. Voici un exemple de mise en forme du texte :

text_widget.tag_configure("gras", font="Helvetica 12 bold")
text_widget.tag_configure("italique", font="Helvetica 12 italic")
text_widget.tag_configure("souligne", underline=True)
Défilement horizontal personnalisé

En plus du défilement vertical automatique, le Multiline Entry peut également activer le défilement horizontal et personnaliser son comportement. Par exemple, vous pouvez désactiver le défilement horizontal ou le limiter à une plage spécifique :

text_widget.config(wrap=tk.NONE, xscrollcommand=scrollbar_horizontal.set)
scrollbar_horizontal.config(command=text_widget.xview)
Intégration avec d’autres widgets Tkinter

Le Multiline Entry peut être combiné avec d’autres widgets Tkinter pour créer des interfaces utilisateur plus complexes. Par exemple, vous pouvez intégrer un Multiline Entry dans une fenêtre de dialogue pour permettre à l’utilisateur de saisir du texte dans un champ de formulaire :

fenetre_dialogue = tk.Toplevel()
text_widget_dialogue = tk.Text(fenetre_dialogue)
text_widget_dialogue.pack()

En explorant ces cas particuliers et en les intégrant dans vos propres projets Tkinter, vous pouvez créer des applications GUI plus robustes et plus conviviales.

💡 FAQ

1. Comment créer un Multiline Entry dans Tkinter ?

Utilisez tk.Text() pour créer un Multiline Entry.

2. Comment détecter les touches de raccourci dans le Multiline Entry ?

Utilisez les événements de clavier avec bind().

3. Peut-on personnaliser les menus contextuels du Multiline Entry ?

Oui, avec tk.Menu() et add_command().

4. Le Multiline Entry prend-il en charge la mise en forme du texte ?

Oui, avec tag_configure() pour différents styles.

5. Comment activer le défilement horizontal dans le Multiline Entry ?

Configurez xscrollcommand et scrollbar_horizontal.

6. Puis-je limiter le défilement horizontal dans le Multiline Entry ?

Oui, en configurant xscrollcommand pour une plage spécifique.

7. Comment intégrer un Multiline Entry avec d’autres widgets Tkinter ?

Ajoutez-le à d’autres widgets comme Toplevel().

8. Peut-on capturer l’événement d’appui sur Entrée dans le Multiline Entry ?

Oui, avec bind("<KeyPress>", fonction).

9. Le Multiline Entry supporte-t-il les raccourcis clavier ?

Oui, avec bind("<Key>", fonction).

10. Comment copier et coller du texte dans le Multiline Entry ?

Utilisez les commandes du menu contextuel ou les raccourcis clavier.

Synthèse 😉

Dans ce guide, nous avons exploré le Multiline Entry de Tkinter, un widget essentiel pour la saisie et l’affichage de texte sur plusieurs lignes dans les applications GUI Python. Nous avons appris comment créer un Multiline Entry et examiné certaines de ses fonctionnalités principales. Avec ces connaissances, vous êtes maintenant prêt à intégrer efficacement le Multiline Entry dans vos propres projets Tkinter.

Autres articles

Différence entre une Liste et un Tableau...
Python est un langage de programmation très polyvalent et puissant,...
Read more
Créer une Matrice de Corrélation en Python...
Dans cet article, nous allons voir comment créer une...
Read more
Python Tkinter - Guide Complet
Python est un langage de programmation populaire et polyvalent utilisé...
Read more

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *