1. Description du widget PanedWindow Tkinter
- Le widget PanedWindow est un conteneur Tkinter qui permet de diviser une fenêtre en plusieurs sous-fenêtres redimensionnables horizontalement ou verticalement. Il peut être utilisé pour créer des interfaces utilisateur flexibles où l'utilisateur peut redimensionner les sous-fenêtres pour ajuster leur taille.
- Le widget PanedWindow se compose de plusieurs panneaux (widgets enfants) qui sont séparés par des barres de redimensionnement. Les panneaux peuvent être ajoutés à un PanedWindow en utilisant la méthode add(). Chaque panneau peut être configuré avec une taille minimale et maximale, ce qui peut être utile pour garantir qu'un panneau ne devienne pas trop petit ou trop grand.
- Le widget PanedWindow prend en charge deux modes d'organisation : horizontal et vertical. Dans le mode horizontal, les panneaux sont disposés de gauche à droite, tandis que dans le mode vertical, ils sont disposés de haut en bas. Le mode par défaut est horizontal.
Voici un exemple simple d'utilisation de PanedWindow :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from tkinter import * root = Tk() root.geometry('500x300') my_paned = PanedWindow(root, orient="horizontal") my_paned.pack(fill="both", expand=True) left_frame = Frame(my_paned , background="yellow", width=100, height=200) right_frame = Frame(my_paned , background="blue", width=200, height=200) my_paned.add(left_frame) my_paned.add(right_frame) root.mainloop() |
Dans cet exemple, nous avons créé un PanedWindow horizontal avec deux panneaux : un panneau jaune de taille 100x200 et un panneau bleu de taille 200x200. Les deux panneaux peuvent être redimensionnés en faisant glisser la barre de séparation entre eux.
2. Liste des méthodes associées à un objet PanedWindow
Voici une liste des méthodes couramment utilisées associées à un objet PanedWindow dans Tkinter :
- add(child, **options): Ajoute un widget enfant au PanedWindow. L'argument child est le widget à ajouter, et les options peuvent être utilisées pour configurer la taille minimale et maximale du widget. Cette méthode renvoie l'index du widget enfant ajouté.
- forget(index): Supprime le widget enfant à l'index spécifié du PanedWindow. Le widget est simplement retiré du PanedWindow, mais il n'est pas détruit.
- remove(child): Supprime le widget enfant spécifié du PanedWindow. Le widget est détruit et retiré du PanedWindow.
- sash_coord(index): Renvoie les coordonnées actuelles de la barre de séparation à l'index spécifié.
- sash_place(index, x, y): Déplace la barre de séparation à l'index spécifié à la position donnée (x, y).
- sash_mark(index, x, y): Marque la position actuelle de la barre de séparation à l'index spécifié. Cette méthode peut être utilisée pour déterminer la distance que la barre de séparation a été déplacée depuis la dernière fois que cette méthode a été appelée.
- panecget(index, option): Renvoie la valeur actuelle de l'option spécifiée pour le widget enfant à l'index spécifié.
- paneconfigure(index, **options): Configure les options spécifiées pour le widget enfant à l'index spécifié.
- panes(): Renvoie une liste de tous les widgets enfants dans le PanedWindow.
- proxywidget(): Renvoie le widget proxy utilisé pour gérer le déplacement de la barre de séparation. Cette méthode peut être utilisée pour configurer les options de ce widget si nécessaire.
Remarque
La liste des méthodes citées ci-dessus pour le widget PanedWindow n'est pas exhaustive, mais ils s'agit plutôt des méthodes couramment utilisées. Il existe d'autres méthodes disponibles pour configurer la taille et la position des panneaux, ainsi que pour accéder aux événements associés à la barre de séparation.
3. Exemples d'usage du widget PanedWindow
Voici Quelques exemples d'utilisation du widget PanedWindow de la bibliothèque Tkinter:
Exemple 1 (Interface utilisateur avec trois panneaux)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import tkinter as tk root = tk.Tk() root.geometry("400x300") paned_window = tk.PanedWindow(root, orient="vertical") paned_window.pack(fill="both", expand=True) top_frame = tk.Frame(paned_window, background="red") middle_frame = tk.Frame(paned_window, background="green") bottom_frame = tk.Frame(paned_window, background="blue") paned_window.add(top_frame, minsize=50) paned_window.add(middle_frame, minsize=50) paned_window.add(bottom_frame, minsize=50) root.mainloop() |
Dans cet exemple, nous avons créé une interface utilisateur avec trois panneaux redimensionnables verticalement. Le panneau du haut est de couleur rouge, le panneau du milieu est de couleur verte et le panneau du bas est de couleur bleue. Les trois panneaux ont une taille minimale de 50 pixels.
Exemple 2 (Interface avec deux panneaux et une barre de séparation personnalisée)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import tkinter as tk root = tk.Tk() root.geometry("400x300") paned_window = tk.PanedWindow(root, orient="horizontal") paned_window.pack(fill="both", expand=True) left_frame = tk.Frame(paned_window, background="red") right_frame = tk.Frame(paned_window, background="green") paned_window.add(left_frame, minsize=100) paned_window.add(right_frame, minsize=100) sash_coord = paned_window.sash_coord(0) sash = tk.Frame(paned_window, height=paned_window.winfo_height(), width=2, background="black") sash.place(x=sash_coord, y=0, height=paned_window.winfo_height()) root.mainloop() |
Dans cet exemple, nous avons créé une interface utilisateur avec deux panneaux redimensionnables horizontalement et une barre de séparation personnalisée. Le panneau de gauche est de couleur rouge et le panneau de droite est de couleur verte. Les deux panneaux ont une taille minimale de 100 pixels. Nous avons ensuite récupéré les coordonnées de la barre de séparation à l'index 0 et créé un widget Frame noir de 2 pixels de largeur qui a été positionné à la même hauteur que le PanedWindow. La barre de séparation par défaut est cachée car elle est remplacée par notre widget personnalisé.
Exemple 3 (Interface utilisateur avec deux panneaux et boutons de redimensionnement)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import tkinter as tk root = tk.Tk() root.geometry("400x300") paned_window = tk.PanedWindow(root, orient="horizontal") paned_window.pack(fill="both", expand=True) left_frame = tk.Frame(paned_window, background="red") right_frame = tk.Frame(paned_window, background="green") paned_window.add(left_frame, minsize=100) paned_window.add(right_frame, minsize=100) sashframe = tk.Frame(paned_window, background="blue") sashframe.place(relx=0.5, rely=0.5, relwidth=0.02, relheight=1.0, anchor="center") sashlabel = tk.Label(sashframe, background="white") sashlabel.pack(fill="both", expand=True) def on_dragged(event): sash_x = event.x if sash_x > 10 and sash_x < root.winfo_width() - 10: sashframe.place(x=sash_x, y=0, relwidth=0.02, relheight=1.0, anchor="center") paned_window.sash_place(0, sash_x, 0) root.bind("", on_dragged) root.mainloop() |
Dans cet exemple, nous avons créé un widget couleur bleue et l'avons ajouté au PanedWindow. Nous avons ensuite ajouté un widget de Label blanc dans le cadre pour créer l'effet de barre de séparation. Nous avons ensuite ajouté une fonction on_dragged() qui est appelée lorsque la souris est déplacée. Cette fonction met à jour la position de la barre de séparation personnalisée et redimensionne les panneaux en conséquence en utilisant la méthode PanedWindow.sash_place(). Notez que la fonction on_dragged est liée à l'événement <B1-Motion> de la fenêtre principale en utilisant la méthode bind().
Younes Derfoufi
CRMEF OUJDA