如何禁用手动调整Tkinter的Treeview列的大小?
由于由于Tk /Tkinter的限制,我无法水平滚动Treeview列,因此我想使其具有粘性,以便将其连接到框架。
问题是用户可以手动调整Treeview列的大小,这会以某种方式弄乱我的界面。是否可以禁用此类功能?
用户可以拖动鼠标来调整列的大小。我要禁用此功能。
设置minwidth
为某个值可以防止列缩小,但是仍然可以将其调整为更大的宽度。我想我可以对更改宽度做出反应并将其恢复为原始宽度,但是必须有一种更好的方法来实现。
-
以下仅在Windows上进行了测试,其他操作系统可能有所不同。
对于任何将来的读者,从Tk
8.5开始,Treeviews都有一种identify_region
方法可以接受屏幕位置(x,y),并将返回与这些坐标所占据的Treeview区域相对应的字符串。返回值之一是“ separator”。
我用它来捕获分隔符上的双击事件以自动调整列的大小,但是您也可以用它来捕获单击事件并阻止它们。
例如:
def handle_click(event): if treeview.identify_region(event.x, event.y) == "separator": return "break" #... treeview.bind('<Button-1>', handle_click)
这样做的好处是 不会 禁用整个树形视图-因此您仍然可以选择/扩展/折叠行,单击列标题进行排序等-您将无法调整列的大小。
请注意,即使禁用了调整大小,“双箭头”光标(⇔)仍会出现。您还可以通过对
<Motion>
事件执行完全相同的操作来防止显示双箭头光标(绑定到该事件,检查该事件是否在分隔符上方,并通过返回字符串阻止传播该事件"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