Tkinter Treeview表格添加滚动条后不显示,该如何解决?
问题原因
- 重复创建了2个Treeview实例:先定义了
tv,后续又定义了my_tree,滚动条的绑定逻辑全部关联到了从未渲染的my_tree,最终调用pack()显示的是没有绑定滚动事件的tv。 - 两个滚动条复用了同一个变量名
tree_scroll,横向滚动条的赋值直接覆盖了纵向滚动条的变量,导致纵向滚动条的绑定完全失效。 - 缺少滚动条到Treeview的反向控制配置:仅给Treeview配置了
yscrollcommand/xscrollcommand通知滚动条位置变化,但没有给滚动条配置command属性,滚动条拖动时无法控制Treeview滚动。 - 原代码调用
tv.pack(fill=X)仅让Treeview填充横向空间,纵向超出容器时也不会触发滚动,需要改为填充双向空间。
修正后代码
# Table Frame tree_frame = Frame(root, bg="#ecf0f1") tree_frame.place(x=0, y=380, width=1980, height=520) style = ttk.Style() style.configure("mystyle.Treeview", font=('Calibri', 18), rowheight=50) # 调整表格内容字体 style.configure("mystyle.Treeview.Heading", font=('Calibri', 18)) # 调整表头字体 # 分别定义纵向、横向滚动条,避免变量覆盖 y_scroll = Scrollbar(tree_frame, orient=VERTICAL) y_scroll.pack(side=RIGHT, fill=Y) x_scroll = Scrollbar(tree_frame, orient=HORIZONTAL) x_scroll.pack(side=BOTTOM, fill=X) # 仅保留一个Treeview实例,初始化时绑定滚动通知 tv = ttk.Treeview(tree_frame, columns=(1, 2, 3, 4, 5, 6), style="mystyle.Treeview", yscrollcommand=y_scroll.set, xscrollcommand=x_scroll.set) # 配置滚动条的控制逻辑,拖动滚动条时可控制表格滚动 y_scroll.config(command=tv.yview) x_scroll.config(command=tv.xview) # 列配置保持原有逻辑不变 tv.column("# 1",anchor=W, stretch=NO, width=100) tv.heading("# 1", text="ID") tv.column("# 2", anchor=W, stretch=NO) tv.heading("# 2", text="分类") tv.column("# 3", anchor=W, stretch=NO, width=150) tv.heading("# 3", text="品牌") tv.column("# 4", anchor=W, stretch=NO, width=255) tv.heading("# 4", text="型号") tv.column("# 5", anchor=W, stretch=NO, width=375) tv.heading("# 5", text="序列号") tv.column("# 6", anchor=W, stretch=NO) tv.heading("# 6", text="备注") tv['show'] = 'headings' tv.bind("<ButtonRelease-1>", getData) # 填充整个容器,内容超出时自动触发滚动 tv.pack(fill=BOTH, expand=True)
原问题运行效果

内容的提问来源于stack exchange,提问作者Rick Wohlschlag
相关产品推荐
相关产品推荐

