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

Python 如何在tkinter中查看树状视图的部分区域和水平滚动?,python,tkinter,treeview,Python,Tkinter,Treeview,我有一个由tk.treeview创建的表,例如,有10列。目标是构建一个具有水平滚动条的treeview小部件,小部件的视图宽度设置为大约4列,并使用水平滚动条查看其他列 使用tk.Frame作为父窗口小部件并使用滚动条,垂直滚动将隐藏标题,所以不要使用它 平台:赢10 Python:3.8.6 特金特:8.6 将tkinter作为tk导入 从tkinter导入ttk root=tk.tk() #root.columnconfigure(0,权重=1) #rowconfigure(0,权重=1)

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

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

平台:赢10 Python:3.8.6 特金特:8.6

将tkinter作为tk导入
从tkinter导入ttk
root=tk.tk()
#root.columnconfigure(0,权重=1)
#rowconfigure(0,权重=1)
columns=[f'Column{i}'表示范围(10)内的i]
x_scrollbar=tk.scrollbar(根,方向=tk.HORIZONTAL)
x_scrollbar.grid(行=1,列=0,粘性=tk.E+tk.W)
y_scrollbar=tk.scrollbar(根,方向=tk.VERTICAL)
y_scrollbar.grid(行=0,列=1,粘性=tk.N+tk.S)
tree=ttk.Treeview(root,columns=columns,height=10,show=“headers”,
xscrollcommand=x_scrollbar.set,yscrollcommand=y_scrollbar.set)
网格(行=0,列=0,粘性=tk.N+tk.S+tk.E+tk.W)
对于树['columns']中的列:
tree.heading(col,text=f“{col}”,anchor=tk.CENTER)
树.柱(柱,锚=tk.CENTER,宽度=100)
对于范围(100)内的i:
插入(“”,'end',值=[i*10+j表示范围内的j(len(列)))
x_滚动条['command']=tree.xview
y_滚动条['command']=tree.yview
root.mainloop()

问题是如何设置视图宽度,使其仅为4列,并使用水平滚动条工作?这样地!(无windiw调整大小)


有一个棘手的方法:

  • 最初将列宽设置为较小的尺寸,对于您的情况,列宽为40(即400/10)
  • 使用
    tree.update()
  • 将列宽设置为所需大小,即100
树['columns']中的列的
:
tree.heading(col,text=f“{col}”,anchor=tk.CENTER)
树.柱(柱,锚=tk.CENTER,宽度=40)#最初尺寸较小
tree.update()
对于树['columns']中的列:
树.列(列,宽度=100)#恢复到所需大小

它可以工作!不知道会发生什么?似乎
tree.update()
设置窗口大小,为tree列设置的新宽度不会更改窗口大小,mainloop()中的事件?没有更多的更新?我又添加了一个
tree.update()
,它仍然有效。是的,在树视图布局之后(通过
tree.update()
),树视图的大小不会受到列宽变化的影响。很好,即使我不知道你从哪里得到它。我花了两天时间,你在几秒钟内就帮了我,非常感谢!!