[Python / Tkinter] Une classe qui crée un cadre défilable

introduction

Tkinter est le choix le plus simple pour créer des interfaces graphiques en Python. Cependant, le contenu suscite quelques insatisfactions. L'un d'eux est que vous ne pouvez pas faire défiler le cadre. Ce qui suit présente une classe pour créer un cadre défilable.

Les classes présentées ci-dessous sont quelques-unes des classes publiées sur les sites suivants. Merci beaucoup pour votre aide: ・ Cadres défilables dans Tkinter | Le blog Teclado, https://blog.tecladocode.com/tkinter-scrollable-frames/

Code complet

Étant donné que la barre de défilement ne peut pas être attachée à Frame dans Tkinter, Canvas, qui est un widget défilable, est d'abord généré et Frame y est placé. Et la largeur de Frame est incluse dans la plage de défilement de Canvas. Cela permet au cadre interne d'apparaître défilé en même temps que le canevas défile.

import tkinter as tk
import tkinter.ttk as ttk

class ScrollableFrame(ttk.Frame):
    def __init__(self, container, bar_x = True, bar_y = True):
        super().__init__(container)
        self.canvas = tk.Canvas(self)
        self.scrollable_frame = ttk.Frame(self.canvas)
        self.scrollable_frame.bind(
            "<Configure>",
            lambda e: self.canvas.configure(
                scrollregion=self.canvas.bbox("all")
            )
        )
        self.canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw")
        if bar_y:
            self.scrollbar_y = ttk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
            self.scrollbar_y.pack(side=tk.RIGHT, fill="y")
            self.canvas.configure(yscrollcommand=self.scrollbar_y.set)
        if bar_x:
            self.scrollbar_x = ttk.Scrollbar(self, orient="horizontal", command=self.canvas.xview)
            self.scrollbar_x.pack(side=tk.BOTTOM, fill="x")
            self.canvas.configure(xscrollcommand=self.scrollbar_x.set)
        self.canvas.pack(side=tk.LEFT, fill="both", expand=True)

En fait utiliser

Lorsque vous l'utilisez réellement, ce sera comme suit.

root = tk.Tk()

frame = ScrollableFrame(root)

for i in range(50):
    for j in range(50):
        ttk.Entry(frame.scrollable_frame, width=5).grid(row=i, column=j)

frame.pack()
root.mainloop()

2020-05-08_06h56_38.png

Comment utiliser

Il y a deux points, lorsque l'instance est créée et le placement du widget dans le ScrollableFrame.

① Lors de la création d'une instance

Les cadres de défilement peuvent être rares si vous avez besoin à la fois de l'axe des x et de l'axe des y. Par conséquent, nous avons rendu possible la sélection de la barre de défilement à ajouter. La valeur initiale est True, donc sélectionnez Masquer si nécessaire.

def __init__(self, container, bar_x = True, bar_y = True):

② Placement du widget dans un cadre déroulant

Comme expliqué ci-dessus, le cadre est créé dans le canevas. Par conséquent, lors du placement du widget, il est nécessaire de le placer dans le cadre (scrollable_frame) du canevas. Faites comme suit.

frame = ScrollableFrame(root)
ttk.Label(frame.scrollable_frame, text="sample").pack

[Supplément]

Cette classe est une modification de la classe publiée sur le site suivant. ・ Cadres défilables dans Tkinter | Le blog Teclado, https://blog.tecladocode.com/tkinter-scrollable-frames/

Il y a deux changements:

Recommended Posts

[Python / Tkinter] Une classe qui crée un cadre défilable
[Python] Un programme qui crée des escaliers avec #
Créer un cadre avec un arrière-plan transparent avec tkinter [Python]
Python: créer une classe qui prend en charge l'affectation décompressée
Une classe qui crée rapidement une base de données avec SQLite3 et insère des données
[Python] Un programme qui crée un tableau à deux dimensions en combinant des entiers
[MQTT / Python] Implémentation d'une classe qui fait Pub / Sub de MQTT en Python
Créer une interface graphique python à l'aide de tkinter
[Python] Hériter d'une classe avec des variables de classe
Une classe qui résume les méthodes fréquemment utilisées dans l'api twitter (python)
[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
Générer une collection de première classe en Python
Classe qui atteint l'API de DMM
[Python] Comment rendre une classe itérable
[Python] Créez un LineBot qui s'exécute régulièrement
Générer une classe à partir d'une chaîne en Python
Un monde typé qui commence par Python
Un programme qui utilise Python pour lire des fichiers indésirables
PGM qui crée automatiquement un itinéraire à pied
[Python] Un programme qui arrondit le score
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
À partir d'un livre que les programmeurs peuvent apprendre (Python): Déclaration de classe (public / privé, etc.)
[Python] Un outil qui permet une importation relative intuitive
Un joli nimporter qui connecte nim et python
Argument de variable Python Un mémorandum lors de l'héritage d'une classe définie
J'ai écrit une classe en Python3 et Java
Créer une page qui se charge indéfiniment avec python
Un programme qui supprime les instructions en double en Python
[Note] Créez une classe de fuseau horaire sur une ligne avec python
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
Publier un module Python qui calcule les éléments météorologiques
Python: préparez un sérialiseur pour l'instance de classe:
"Kit Python" qui appelle des scripts Python depuis Swift
Plug-in Vim qui formate automatiquement les styles Python
[Python] classe, instance
"Kanrika" la classe python
À propos de python, classe
classe python, instance
Les bases de #Python (classe)
[Python] Modèle Tkinter
Créer une fausse classe qui triche également est une instance
[Python] Un programme qui compte le nombre de vallées
J'ai créé une VM qui exécute OpenCV pour Python
Implémentation python de la classe de régression linéaire bayésienne
Python qui fusionne beaucoup d'excellence en un seul Excel
D'un livre que les programmeurs peuvent apprendre ... (Python): Pointer
Que contient cette variable (lorsque le script Python est en cours d'exécution)
Création d'une bibliothèque Python DateTimeRange qui gère les plages horaires
En Python, créez un décorateur qui accepte dynamiquement les arguments Créer un décorateur
[Python] tkinter Code susceptible d'être réutilisé
[Python] Comment écrire une docstring conforme à PEP8
Un serveur qui fait écho aux données POSTées avec flask / python
[Python] Une bibliothèque pratique qui convertit les kanji en hiragana
Un mémo que j'ai touché au magasin de données avec python
[Python] Créez un fichier de distribution pour le programme Tkinter avec cx_Freeze
[Python] Un programme qui compare les positions des kangourous.
Programme Python qui convertit les données ical en texte
MALSS (introduction), un outil qui prend en charge l'apprentissage automatique en Python