Maison >développement back-end >Tutoriel Python >Comment puis-je ajouter une barre de défilement à un groupe de widgets dans Tkinter ?
Tkinter fournit un widget de barre de défilement pour faire défiler verticalement ou horizontalement une fenêtre. Cependant, l'interface de la barre de défilement ne peut être associée qu'à des widgets spécifiques, tels que List, Textbox, Canvas et Entry. De simples groupes de widgets verticaux ou horizontaux peuvent être placés dans un widget de texte à l'aide de la méthode window_create. Cependant, cette méthode manque de flexibilité pour les mises en page complexes.
Une solution plus courante pour une mise en page à usage général consiste à utiliser un widget de canevas avec des barres de défilement associées. Les widgets sont ensuite intégrés dans le cadre, qui est placé dans le canevas. La largeur et la hauteur du cadre doivent être définies pour correspondre à la région de défilement du canevas.
L'intégration des widgets dans un cadre permet le placement à l'aide des méthodes pack, place ou grille. Cette approche garantit que tous les éléments créés dans le cadre peuvent défiler à l'aide de la barre de défilement.
Il est également possible de dessiner des éléments de texte directement sur le canevas. La hauteur et les coordonnées de la ligne peuvent être calculées en fonction des exigences de police et de mise en page. Le marquage des éléments avec les informations de colonne permet un ajustement facile des coordonnées x et des largeurs entre les colonnes.
Voici un exemple de solution de cadre intégré dans le canevas utilisant un objet -approche orientée :
import tkinter as tk class Example(tk.Frame): def __init__(self, parent): tk.Frame.__init__(self, parent) self.canvas = tk.Canvas(self, borderwidth=0, background="#ffffff") self.frame = tk.Frame(self.canvas, background="#ffffff") self.vsb = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview) self.canvas.configure(yscrollcommand=self.vsb.set) self.vsb.pack(side="right", fill="y") self.canvas.pack(side="left", fill="both", expand=True) self.canvas.create_window((4, 4), window=self.frame, anchor="nw", tags="self.frame") self.frame.bind("<Configure>", self.onFrameConfigure) self.populate() def populate(self): for row in range(100): tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0) t = "this is the second column for row %s" % row tk.Label(self.frame, text=t).grid(row=row, column=1) def onFrameConfigure(self, event): self.canvas.configure(scrollregion=self.canvas.bbox("all")) if __name__ == "__main__": root = tk.Tk() example = Example(root) example.pack(side="top", fill="both", expand=True) root.mainloop()
Voici une solution procédurale qui n'utilise pas de class :
import tkinter as tk def populate(frame): for row in range(100): tk.Label(frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0) t = "this is the second column for row %s" % row tk.Label(frame, text=t).grid(row=row, column=1) def onFrameConfigure(canvas): canvas.configure(scrollregion=canvas.bbox("all")) root = tk.Tk() canvas = tk.Canvas(root, borderwidth=0, background="#ffffff") frame = tk.Frame(canvas, background="#ffffff") vsb = tk.Scrollbar(root, orient="vertical", command=canvas.yview) canvas.configure(yscrollcommand=vsb.set) vsb.pack(side="right", fill="y") canvas.pack(side="left", fill="both", expand=True) canvas.create_window((4, 4), window=frame, anchor="nw") frame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas)) populate(frame) root.mainloop()
En résumé, bien que l'interface de barre de défilement de Tkinter ait des limites, il existe plusieurs approches pour ajouter une barre de défilement à un groupe de widgets. En comprenant ces approches, vous pouvez gérer efficacement l'affichage et le défilement de votre fenêtre Tkinter.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!