如何在 tkinter 中查看树视图的部分区域和水平滚动?

我有一个由 tk.treeview 创建的表,例如,有 10 列。目标是构建一个带有水平滚动条的树形视图小部件,小部件的视图宽度设置为大约 4 列,并使用水平滚动条查看其他列。


使用 tk.Frame 作为父窗口小部件并使用滚动条,垂直滚动将隐藏标题,因此不要使用它。


平台:WIN 10 Python:3.8.6 tkinter:8.6


import tkinter as tk

from tkinter import ttk


root = tk.Tk()


# root.columnconfigure(0, weight=1)

# root.rowconfigure(0, weight=1)


columns = [f'Column {i}' for i in range(10)]


x_scrollbar = tk.Scrollbar(root, orient=tk.HORIZONTAL)

x_scrollbar.grid(row=1, column=0, sticky=tk.E+tk.W)

y_scrollbar = tk.Scrollbar(root, orient=tk.VERTICAL)

y_scrollbar.grid(row=0, column=1, sticky=tk.N+tk.S)


tree = ttk.Treeview(root, columns=columns, height=10, show="headings",

    xscrollcommand=x_scrollbar.set, yscrollcommand=y_scrollbar.set)

tree.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)


for col in tree['columns']:

        tree.heading(col, text=f"{col}", anchor=tk.CENTER)

        tree.column(col, anchor=tk.CENTER, width=100)


for i in range(100):

    tree.insert('', 'end', values=[i*10+j for j in range(len(columns))])


x_scrollbar['command'] = tree.xview

y_scrollbar['command'] = tree.yview


root.mainloop()

https://img1.sycdn.imooc.com/658a88750001964510230283.jpg

问题是如何将视图宽度设置为大约 4 列并使用水平滚动条工作?像这样 !(没有窗口调整大小)

https://img1.sycdn.imooc.com/658a887f0001feb204420284.jpg


万千封印
浏览 96回答 1
1回答

慕标5832272

有一个棘手的方法可以做到这一点:最初将列宽设置为较小的尺寸,对于您的情况,它是 40(即 400 / 10)使用强制更新树视图tree.update()将列宽设置为所需的大小,即 100for col in tree['columns']:    tree.heading(col, text=f"{col}", anchor=tk.CENTER)    tree.column(col, anchor=tk.CENTER, width=40) # initially smaller sizetree.update()for col in tree['columns']:    tree.column(col, width=100) # restore to desired size
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python