Maison > développement back-end > Tutoriel Python > Comment créer un cadre défilant dans Tkinter avec activation automatique ?

Comment créer un cadre défilant dans Tkinter avec activation automatique ?

DDD
Libérer: 2024-11-14 18:13:02
original
200 Les gens l'ont consulté

How to Create a Scrollable Frame in Tkinter with Automatic Activation?

Barre de défilement Tkinter pour cadre

Problème :

Créer une barre de défilement verticale pour un cadre qui s'active automatiquement lorsque le contenu du cadre dépasse sa hauteur, permettant ainsi l'affichage de plusieurs étiquettes dans le cadre. frame.

Implémentation :

Voici un exemple de code qui encapsule un cadre déroulant :

# VerticalScrolledFrame class allows vertical scrolling within a frame
class VerticalScrolledFrame(ttk.Frame):
    def __init__(self, parent, *args, **kw):
        # Create a canvas and vertical scrollbar
        vscrollbar = ttk.Scrollbar(self, orient=VERTICAL)
        vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
        canvas = tk.Canvas(self, bd=0, highlightthickness=0,
                            yscrollcommand=vscrollbar.set)
        canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
        vscrollbar.config(command=canvas.yview)
        
        # Create an inner frame for content, scrollable within the canvas
        self.interior = interior = ttk.Frame(canvas)
        interior_id = canvas.create_window(0, 0, window=interior,
                                            anchor=NW)
        
        # Synchronize frame and canvas dimensions
        def _configure_interior(event):
            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
            canvas.config(scrollregion="0 0 %s %s" % size)
            if interior.winfo_reqwidth() != canvas.winfo_width():
                canvas.config(width=interior.winfo_reqwidth())
        interior.bind('<Configure>', _configure_interior)
        
        def _configure_canvas(event):
            if interior.winfo_reqwidth() != canvas.winfo_width():
                canvas.itemconfigure(interior_id, width=canvas.winfo_width())
        canvas.bind('<Configure>', _configure_canvas)
Copier après la connexion

Avantages de cette implémentation :

  • Il encapsule le canevas, la barre de défilement, et un cadre intérieur pour une gestion plus facile.
  • Il synchronise automatiquement les dimensions de la toile avec le contenu du cadre intérieur.
  • Il garantit une fonctionnalité de défilement cohérente et fiable.

Utilisation :

# Example usage
app = tk.Tk()
my_frame = VerticalScrolledFrame(app)
my_frame.pack()
for i in range(50):
    ttk.Label(my_frame.interior, text=i).grid(row=i, column=0)  # Grid method ensures proper layout of labels
app.mainloop()
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal