python - 如何在 tkinter 中将滚动条内容居中?
问题描述
我创建了我的应用程序的一部分,用户可以在其中滚动浏览多个小部件。我的问题是我无法弄清楚如何设置可滚动区域(tk.Frame)以将其宽度调整为父框架。这是因为框架放置在画布窗口中,因此从不调用 grid() 或 pack(),因此我不能使用sticky=tk.EW。我应该注意,设置画布 anchor=tk.CENTER 也不起作用。
这是我的代码。self.workspace_frame 指的是父框架:
# Initialize scrollbar
scrollbar = tk.Scrollbar(self.workspace_frame)
scrollbar.configure(
orient=tk.VERTICAL,
command=canvas.yview
)
# Initialize contents frame
contents = tk.Frame(canvas)
contents.configure(
#background=self.receded_color
background='red'
)
# Prevent resizing problems
contents.bind(
'<Configure>',
lambda event: canvas.configure(
scrollregion=canvas.bbox(tk.ALL)
)
)
# Configure canvas
canvas.create_window((0, 0), window=contents)
canvas.configure(
yscrollcommand=scrollbar.set,
background=self.receded_color,
highlightthickness=0
)
# Add elements to grid
canvas.grid(column=0, row=0, sticky=tk.NS)
scrollbar.grid(column=1, row=0, sticky=tk.NS)
这是我的滚动条和滚动区域的样子。红色表示我正在努力居中的框架:我的应用程序
谢谢。
解决方案
如果您希望红框 ( contents
) 与其父框 ( ) 具有相同的宽度canvas
,则需要在调整其父框大小后调整其宽度:
canvas.bind('<Configure>', lambda e: contents.config(width=e.width))
推荐阅读
- c++ - 由于没有文件或目录,在 VSC 上运行代码的问题
- r - 具有不同长度项目的(已经很宽的)数据的复杂重组
- r - 数据框中不同值的人口金字塔
- kubernetes - 如何让 pod 在 Kubernetes 上以 Flink 应用模式暴露 prometheus 监控端口?
- azure-devops - Azure DevOps - 看不到积压中的许多工作项
- spring - 是否有任何最佳实践来审核 Spring Rest 应用程序?
- python-3.x - 如何使不和谐机器人定时静音自动 5 分钟?
- r - 在 R 中创建具有匹配名称的较小向量子集的子集数据框
- file - 文件路径访问权限
- mysql - 从重复的“MYSQL”中选择不同的匹配数据