Tkinter treeview绑定滚动条后缩小至左上角问题求解
问题原因
导致Treeview缩小到左上角的问题由以下几个配置错误共同引发:
- 滚动条父容器设置错误:你将垂直、水平滚动条的
master直接设为了Treeview本身,还把滚动条和Treeview放在了同一个grid单元格中,grid布局会自动挤压Treeview的空间为滚动条腾位置,最终导致Treeview被压缩。 - 父容器布局权重未配置:
frm1没有设置grid行、列权重,就算Treeview设置了sticky="nsew",也无法自动拉伸填充frm1的空间。 - 上层框架的sticky和权重配置错误:
frm1的grid参数用了sticky="nw",只会停靠在左上角,本身就不会填充上层ctr_left的可用空间ctr_left给行0、行1都设置了weight=1,会导致frm1和frm2平分ctr_left的高度,和你预期的frm1占550px、frm2占50px的布局不符。
修复方案
按以下步骤修改代码即可:
- 修正
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")
- 给
frm1配置行、列权重,保证子组件可以拉伸:
# 添加在frm1创建完成后 self.frm1.grid_rowconfigure(0, weight=1) self.frm1.grid_columnconfigure(0, weight=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
相关产品推荐
相关产品推荐

