You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter treeview绑定滚动条后缩小至左上角问题求解

问题原因

导致Treeview缩小到左上角的问题由以下几个配置错误共同引发:

  • 滚动条父容器设置错误:你将垂直、水平滚动条的master直接设为了Treeview本身,还把滚动条和Treeview放在了同一个grid单元格中,grid布局会自动挤压Treeview的空间为滚动条腾位置,最终导致Treeview被压缩。
  • 父容器布局权重未配置:frm1没有设置grid行、列权重,就算Treeview设置了sticky="nsew",也无法自动拉伸填充frm1的空间。
  • 上层框架的sticky和权重配置错误:
    1. frm1的grid参数用了sticky="nw",只会停靠在左上角,本身就不会填充上层ctr_left的可用空间
    2. ctr_left给行0、行1都设置了weight=1,会导致frm1和frm2平分ctr_left的高度,和你预期的frm1占550px、frm2占50px的布局不符。
修复方案

按以下步骤修改代码即可:

  1. 修正ctr_left的行权重和frm1的sticky参数:
# 原代码self.ctr_left.grid_rowconfigure(1, weight=1) 改为
self.ctr_left.grid_rowconfigure(1, weight=0)
# 原代码self.frm1.grid(row=0, column=0, sticky="nw") 改为
self.frm1.grid(row=0, column=0, sticky="nsew")
  1. 给frm1配置行、列权重,保证子组件可以拉伸:
# 添加在frm1创建完成后
self.frm1.grid_rowconfigure(0, weight=1)
self.frm1.grid_columnconfigure(0, weight=1)
  1. 修改滚动条的父容器和grid布局位置,不要放在Treeview内部:
# 滚动条的master改为frm1,调整grid坐标
self.ytree_scroll = ttk.Scrollbar(master=self.frm1, orient=VERTICAL, command=self.my_tree.yview)
self.xtree_scroll = ttk.Scrollbar(master=self.frm1, orient=HORIZONTAL, command=self.my_tree.xview)       
self.ytree_scroll.grid(row=0, column=1, sticky="ns")
self.xtree_scroll.grid(row=1, column=0, sticky="ew")
# 修正Treeview的滚动配置属性名,原yscroll/xscroll是错误写法
self.my_tree.configure(yscrollcommand=self.ytree_scroll.set, xscrollcommand=self.xtree_scroll.set)

内容的提问来源于stack exchange,提问作者neo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:09:03