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/
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)
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()
Zum Zeitpunkt der Instanziierung und der Platzierung des Widgets im ScrollableFrame gibt es zwei Punkte.
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):
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
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