📅  最后修改于: 2023-12-03 14:48:00.020000             🧑  作者: Mango
在 Tkinter 中,如果需要在窗口中显示大量的内容,例如文本或图像,一个常见的问题是如何控制滚动条。一种解决方案是使用可滚动帧。
可滚动帧是一种用于容纳其他部件的小部件,可以在需要时自动添加滚动条。可以在该帧中创建、添加和删除子部件,就像这个帧是一个常规帧一样。
以下是一个 Tkinter 应用程序,其中包含一个可滚动帧,您可以用它来显示任意数量的子部件。
import tkinter as tk
from tkinter import ttk
class ScrollableFrame(tk.Frame):
def __init__(self, container, *args, **kwargs):
super().__init__(container, *args, **kwargs)
self.canvas = tk.Canvas(self)
scrollbar = ttk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
self.scrollable_frame = tk.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")
self.canvas.configure(yscrollcommand=scrollbar.set)
self.canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
root = tk.Tk()
scrollable_frame = ScrollableFrame(root)
scrollable_frame.pack(side="top", fill="both", expand=True)
for i in range(50):
tk.Label(scrollable_frame.scrollable_frame, text=f"Sample scrolling label {i+1}").pack()
root.mainloop()
尝试运行此代码,您会发现可以向上下滚动包含 50 个标签的帧。
上述代码中的 ScrollableFrame 类是一个继承了标准 Tkinter 帧的自定义控件。在该类中,我们创建了一个带有垂直滚动条的画布。我们还创建了一个子帧,该子帧包含创建的所有子部件。
创建窗口时,.configure() 函数将可滚动帧的滚动区域配置为所有内容的边界框。这里有一些事情需要注意:
在执行完这些操作后,我们可以放置可滚动帧并向其中添加子部件。
可滚动帧是一个非常方便的方法,可以容纳大量文本或图像。使用标准 Tkinter 部件创建和配置可滚动帧是有点棘手的,但是,这里提供的示例代码可以让您了解如何利用 Tkinter 中的 canvas 和 frame 部件,以创建一个滚动框。