Doo*_*890 4 python treeview tk-toolkit tkinter ttk
由于看起来像Tk/Tkinter限制,我不能水平滚动Treeview列,我想让它粘,所以它附加到帧.
问题是用户可以手动调整Treeview列的大小,这可能会以某种方式搞乱我的界面.是否可以禁用此类功能?
请注意列标题的大小.
用户可以拖动鼠标来调整列大小.我想禁用它.
设置minwidth为某个值可防止列收缩,但仍可以将其调整为更大的宽度.我想我可以对改变宽度做出反应并将其恢复原状,但必须有更好的方法来做到这一点.
以下仅在Windows上进行了测试,其他操作系统可能会有所不同.
对于任何未来的读者,从Tk 8.5开始,Treeviews有一个identify_region接受屏幕位置(x,y)的方法,并返回一个字符串,该字符串对应于那些坐标占据的树视图区域.
其中一个返回值是"分隔符".
我已经使用它来捕获分隔符上的双击事件以自动调整列,但您也可以使用它来捕获单击事件并阻止它们.
例如:
def handle_click(event):
if treeview.identify_region(event.x, event.y) == "separator":
return "break"
#...
treeview.bind('<Button-1>', handle_click)
Run Code Online (Sandbox Code Playgroud)
这样做的好处是不会禁用整个树视图 - 因此您仍然可以选择/展开/折叠行,单击列标题进行排序等等 - 您将无法调整列的大小.
请注意,即使禁用了调整大小,仍会出现"双箭头"光标(⇔).您还可以通过对<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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |