对于ttk Treeview小部件,不会激活水平滚动

JDM*_*JDM 10 treeview tkinter scrollbar ttk python-2.7

我正在使用ttk Treeview小部件来实现文件夹/路径选择对话框.除了我的水平滚动条不会激活外,它都按预期工作.无论文件夹路径横向有多宽,无论窗口有多窄,都不会出现水平滑块.垂直滚动工作正常.

当你在树视图中只使用一列时,或者只是在配置和连接小部件时出现新手错误时,我认为它要么是某种限制.我打赌后者.

扩展对话框以显示完整文件夹深度的示例:

全屏宽度

对话框缩小到水平滚动应该激活的程度(但不是):

宽度变窄

这是我的GUI布局代码:

winDirSel = tk.Toplevel()
winDirSel.title('Select Test Directory...')
tvwDirSel = ttk.Treeview(winDirSel,
                         height=10,padding=3,
                         show='tree')
lblTestDir = tk.Label(winDirSel, relief=tk.SUNKEN,
                      justify=tk.LEFT, anchor=tk.W,
                      textvariable=ctrlTestDir,width=80)
scbHDirSel = ttk.Scrollbar(winDirSel,
                           orient=tk.HORIZONTAL,
                           command=tvwDirSel.xview)
scbVDirSel = ttk.Scrollbar(winDirSel,
                           orient=tk.VERTICAL,
                           command=tvwDirSel.yview)
tvwDirSel.configure(xscrollcommand=scbHDirSel.set,
                    yscrollcommand=scbVDirSel.set)
lblTestDir.grid(row=0,column=0,sticky=tk.EW)
tvwDirSel.grid(row=1,column=0,sticky=tk.NSEW)
scbVDirSel.grid(row=1,column=1,sticky=tk.NS)
scbHDirSel.grid(row=2,column=0,sticky=tk.EW)
winDirSel.rowconfigure(1,weight=1)
winDirSel.columnconfigure(0,weight=1)
Run Code Online (Sandbox Code Playgroud)

JDM*_*JDM 10

OK,一些玩后minwidthstretch,我想我有一个更好的处理.水平滚动由列边缘离开窗口边界而不是列内容触发.因此,您可以使用这些参数来强制列更宽,从而强制滚动.

但问题是你失去了自动调整列宽以适应树本身的宽度.您要么必须强制它以适应任何(假定的)可能的文件夹深度,要么您在文件夹名称被截断在列的右边界处.

所以底线:它只是小部件本身的限制.(至少关于它在我的平台上的行为,MS Windows.)

  • 我发现的一个技巧是,对于您希望允许超出可视区域右边缘的每一列,将其“width”属性设置为默认宽度或“0”,然后将“minwidth”设置为宽度你实际上想要。`stretch` 也必须设置为 `True`。这将导致列超出可视区域,激活水平滚动条。如果您尝试仅设置“宽度”,您只会使小部件变宽。 (2认同)