Maison > développement back-end > Tutoriel Python > Comment puis-je créer un cadre déroulant dans Tkinter à l'aide d'un canevas et d'une barre de défilement ?

Comment puis-je créer un cadre déroulant dans Tkinter à l'aide d'un canevas et d'une barre de défilement ?

Mary-Kate Olsen
Libérer: 2024-11-26 08:57:12
original
1007 Les gens l'ont consulté

How can I create a scrollable frame in Tkinter using a canvas and scrollbar?

Utiliser Tkinter pour ajouter une fonctionnalité de barre de défilement aux cadres

Dans Tkinter, la création d'un cadre déroulant nécessite l'incorporation d'une barre de défilement, qui permet le défilement automatique de contenu qui dépasse la hauteur du cadre. Sur la base de discussions approfondies, il a été suggéré que la construction d'un cadre, l'inclusion d'un canevas à l'intérieur et l'attachement de la barre de défilement au cadre permettraient d'obtenir la fonctionnalité souhaitée. Un objet fenêtre a ensuite été conçu dans le canevas pour accueillir des cadres supplémentaires.

À l'aide du code Python suivant, un cadre à défilement vertical peut être implémenté efficacement :

import tkinter as tk
import tkinter.ttk as ttk

class VerticalScrolledFrame(ttk.Frame):
    def __init__(self, parent, *args, **kw):
        ttk.Frame.__init__(self, parent, *args, **kw)
        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)
        canvas.xview_moveto(0)
        canvas.yview_moveto(0)
        self.interior = interior = ttk.Frame(canvas)
        interior_id = canvas.create_window(0, 0, window=interior, anchor=NW)
        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)

root = tk.Tk()
frame = VerticalScrolledFrame(root)
frame.pack()
for i in range(10):
    ttk.Button(frame.interior, text="Button " + str(i)).pack()
root.mainloop()
Copier après la connexion

Réponse aux requêtes :

  1. Il est possible d'obtenir cette fonctionnalité de manière plus efficace en utilisant le code fourni.
  2. La méthode de la grille est préférée car elle permet un meilleur contrôle sur la disposition des widgets dans le cadre.
  3. L'argument Anchor='nw' spécifie que la fenêtre doit être ancrée au coin nord-ouest de la toile, garantissant que le contenu reste visible lorsque le cadre défile verticalement.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal