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

发布于 2021-01-29 17:41:57

由于由于Tk /Tkinter的限制,我无法水平滚动Treeview列,因此我想使其具有粘性,以便将其连接到框架。

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

用户可以拖动鼠标来调整列的大小。我要禁用此功能。

设置minwidth为某个值可以防止列缩小,但是仍然可以将其调整为更大的宽度。我想我可以对更改宽度做出反应并将其恢复为原始宽度,但是必须有一种更好的方法来实现。

关注者
0
被浏览
150
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    以下仅在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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看