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/
É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)
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()
Il y a deux points, lorsque l'instance est créée et le placement du widget dans le ScrollableFrame.
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):
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
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