Tkinter Treeview为何多出一列?如何控制其宽度与列数?
解决Tkinter Treeview额外列与宽度控制问题
嘿,我一眼就揪出问题所在啦——你看到的额外列是Treeview默认自带的**#0列**(也就是专门给树形结构留的索引列),哪怕你不需要树形功能,它也会默认显示出来。另外你代码里还有个小拼写失误,咱们一起给你搞定:
问题根源
Treeview组件天生自带一个索引为#0的列,用来展示树形层级的折叠/展开图标,哪怕你完全用不上树形结构,它也会默认占着位置,这就是你头疼的“额外列”。加上你没对这个列做隐藏处理,自然没法让组件只显示你定义的两列。
两步解决问题
- 把默认的
#0列宽度设为0,直接隐藏它 - 修正代码里的拼写错误(
anchor = 'centeenter'应该是anchor='center')
修正后的完整代码
from Tkinter import * from ttk import Treeview root = Tk() # 初始化时直接指定columns参数,写法更简洁 tree = Treeview(root, height=10, columns=('one', 'two')) # 关键操作:隐藏默认的#0列,stretch=NO防止它自动拉伸 tree.column('#0', width=0, stretch=NO) # 设置自定义列的宽度 tree.column('one', width=50) tree.column('two', width=50) # 设置表头文本与对齐方式,修正拼写错误 tree.heading('one', text='UserName', anchor='center') tree.heading('two', text='ID', anchor='center') tree.grid(row=3, column=0) root.mainloop()
额外小提示
- 如果之后需要恢复
#0列,只需要把width改回非0值,或者删掉stretch=NO就行 - 要是想让Treeview整体宽度刚好适配两列,可以在
grid布局时加上sticky='nsew',再给父容器的列设置权重,不过上面的代码已经能实现“只显示2列”的核心需求啦
内容的提问来源于stack exchange,提问作者user9175260
相关产品推荐
相关产品推荐

