因为I can't horizontally scroll Treeview column是由于tk/tkinter的限制,所以我想让它粘在框架上。
问题是用户可以手动调整treeview列的大小,这会以某种方式扰乱我的界面。是否可以禁用此类功能?
python - 如何禁用手动调整Tkinter的Treeview列的大小?-LMLPHP
请注意列标题的大小。
python - 如何禁用手动调整Tkinter的Treeview列的大小?-LMLPHP
用户可以拖动鼠标调整列的大小。我想禁用这个。
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)

这样做的好处是不会禁用整个treeview,因此您仍然可以选择/展开/折叠行,单击列标题进行排序,等等,只是无法调整列的大小。
请注意,即使大小调整被禁用,“双箭头”光标()仍将出现。您还可以通过与<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

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

10-10 21:56
查看更多