python - 如何禁用 Tkinter 的 Treeview 列的手动调整大小?

标签 python tkinter treeview tk-toolkit ttk

I can't horizontally scroll Treeview column由于似乎是 Tk/Tkinter 的限制,我想让它变粘,以便它附在框架上。

问题是用户可以手动调整 Treeview 列的大小,这会以某种方式弄乱我的界面。是否可以禁用此类功能?

Note the size of column header.

注意列标题​​的大小。

User can drag mouse to resize column. I want to disable this.

用户可以拖动鼠标来调整列的大小。我想禁用它。

minwidth 设置为某个值可以防止列缩小,但仍然可以将其调整为更大的宽度。我想我可以对宽度的变化使用react并将其恢复为原始状态,但必须有更好的方法来做到这一点。

最佳答案

以下仅在 Windows 上测试过,其他操作系统可能会有所不同。

对于任何 future 的读者,从 Tk 8.5 开始,Treeviews 有一个 identify_region 接受屏幕位置 (x,y) 并将返回对应于这些坐标占据的 TreeView 区域的字符串的方法。

返回值之一是“分隔符”。

我用它来捕获分隔符上的双击事件以自动调整列的大小,但您也可以用它来捕获单击事件并阻止它们。

例如:

def handle_click(event):
    if treeview.identify_region(event.x, event.y) == "separator":
        return "break"

#...

treeview.bind('<Button-1>', handle_click)

这样做的好处是不会禁用整个 TreeView ——因此您仍然可以选择/展开/折叠行、单击列标题进行排序等等——您只是无法调整列的大小。

请注意,即使禁用了调整大小,“双箭头”光标 (⇔) 仍会出现。您还可以通过对 <Motion> 执行完全相同的操作来防止显示双箭头光标。事件(绑定(bind)到它,检查它是否在分隔符之上,并通过返回字符串 "break" 停止传播事件)。

>>> sys.version
'3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)]'
>>> tkinter.TkVersion
8.6

关于python - 如何禁用 Tkinter 的 Treeview 列的手动调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45358408/

相关文章:

python - tkinter:在 Canvas 上使用滚动条

javascript - 在react.js中渲染时如何移除树的根

python - if 条件后的语法无效

python - NoReverseMatch at/Reverse 为 'single_product',未找到任何参数。尝试了 1 个模式 : ['products/(?P<slug>)/$' ]

python - 赋值内置函数

python - 如何将图像加载到 python 3.4 tkinter 窗口中?

python - Tkinter 标签文本不会每次都改变

WPF TreeView 分层绑定(bind)。

c# - 绑定(bind)到 "IsExpanded"不适用于 TreeView 中的根节点

python - 类(非实例)构造函数