因为I can't horizontally scroll Treeview column是由于tk/tkinter的限制,所以我想让它粘在框架上。
问题是用户可以手动调整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)
这样做的好处是不会禁用整个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/