[Python / Tkinter] Eine Klasse, die einen scrollbaren Frame erstellt

Einführung

Tkinter ist die einfachste Wahl zum Erstellen von GUIs in Python. Es gibt jedoch einige Unzufriedenheiten mit dem Inhalt. Eine davon ist, dass Sie den Rahmen nicht scrollen können. Im Folgenden wird eine Klasse zum Erstellen eines scrollbaren Frames vorgestellt.

Die unten vorgestellten Klassen sind einige der Klassen, die auf den folgenden Websites veröffentlicht wurden. Vielen Dank, dass Sie mir geholfen haben: ・ Bildlaufrahmen in Tkinter | Der Teclado-Blog, https://blog.tecladocode.com/tkinter-scrollable-frames/

Vollständiger Code

Da die Bildlaufleiste in Tkinter nicht an Frame angehängt werden kann, wird Canvas, ein scrollbares Widget, zuerst generiert und Frame eingefügt. Die Breite des Rahmens ist im scrollbaren Bereich von Canvas enthalten. Dadurch kann der interne Frame gleichzeitig mit dem Scrollen des Canvas gescrollt angezeigt werden.

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)

Eigentlich verwenden

Wenn Sie es tatsächlich verwenden, wird es wie folgt sein.

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

Wie benutzt man

Zum Zeitpunkt der Instanziierung und der Platzierung des Widgets im ScrollableFrame gibt es zwei Punkte.

① Beim Erstellen einer Instanz

Bildlaufbare Rahmen können selten sein, wenn Sie sowohl die x-Achse als auch die y-Achse benötigen. Daher haben wir es möglich gemacht, die hinzuzufügende Bildlaufleiste auszuwählen. Der Anfangswert ist True. Wählen Sie daher bei Bedarf Ausblenden.

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

② Platzierung des Widgets im scrollbaren Rahmen

Wie oben erläutert, wird der Rahmen im Canvas erstellt. Daher ist es beim Platzieren des Widgets erforderlich, es im Rahmen (scrollable_frame) im Canvas zu platzieren. Gehen Sie wie folgt vor.

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

[Ergänzung]

Diese Klasse ist eine Modifikation der Klasse, die auf der folgenden Site veröffentlicht wurde. ・ Bildlaufrahmen in Tkinter | Der Teclado-Blog, https://blog.tecladocode.com/tkinter-scrollable-frames/

Es gibt zwei Änderungen:

Recommended Posts

[Python / Tkinter] Eine Klasse, die einen scrollbaren Frame erstellt
[Python] Ein Programm, das Treppen mit # erstellt
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Python: Erstellen Sie eine Klasse, die entpackte Zuweisungen unterstützt
Eine Klasse, die mit SQLite3 schnell eine Datenbank erstellt und Daten einfügt
[Python] Ein Programm, das durch Kombinieren von Ganzzahlen ein zweidimensionales Array erstellt
[MQTT / Python] Implementierte eine Klasse, die Pub / Sub von MQTT in Python ausführt
Erstellen Sie mit tkinter eine Python-GUI
[Python] Erbt eine Klasse mit Klassenvariablen
Eine Klasse, die häufig verwendete Methoden in Twitter API (Python) zusammenfasst.
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Generieren Sie eine erstklassige Sammlung in Python
Klasse, die die API von DMM trifft
[Python] Wie man eine Klasse iterierbar macht
[Python] Erstellen Sie einen LineBot, der regelmäßig ausgeführt wird
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Eine typisierte Welt, die mit Python beginnt
Ein Programm, das Python zum Abspielen von Junk verwendet
PGM, das automatisch eine Wanderroute erstellt
[Python] Ein Programm, das die Partitur rundet
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Aus einem Buch, das Programmierer lernen können (Python): Klassendeklaration (öffentlich / privat usw.)
[Python] Ein Tool, das einen intuitiven relativen Import ermöglicht
Ein netter Nimporter, der Nim und Python verbindet
Python-Variablenargument Ein Memorandum beim Erben einer definierten Klasse
Ich habe eine Klasse in Python3 und Java geschrieben
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
Ein Programm, das doppelte Anweisungen in Python entfernt
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Veröffentlichen Sie ein Python-Modul, das meteorologische Elemente berechnet
Python: Bereiten Sie einen Serializer für die Klasseninstanz vor:
"Python Kit", das Python-Skripte von Swift aufruft
Vim-Plug-In, das automatisch Python-Stile formatiert
[Python] -Klasse, Instanz
"Kanrika" die Python-Klasse
Über Python, Klasse
Python-Klasse, Instanz
# Python-Grundlagen (Klasse)
[Python] Tkinter-Vorlage
Erstellen Sie eine gefälschte Klasse, die auch betrügt, ist Instanz
[Python] Ein Programm, das die Anzahl der Täler zählt
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Python, das viele Excel zu einem Excel zusammenführt
Aus einem Buch, das Programmierer lernen können ... (Python): Zeiger
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Erstellt eine Python-Bibliothek DateTimeRange, die Zeitbereiche verarbeitet
Erstellen Sie in Python einen Dekorator, der Argumente dynamisch akzeptiert. Erstellen Sie einen Dekorator
[Python] tkinter Code, der wahrscheinlich wiederverwendet wird
[Python] So schreiben Sie eine Dokumentzeichenfolge, die PEP8 entspricht
Ein Server, der POST-Daten mit flask / python wiedergibt
[Python] Eine praktische Bibliothek, die Kanji in Hiragana konvertiert
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Python-Programm, das ical-Daten in Text konvertiert
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt