如何获取TCL/Tk Treeview中被点击行的节点ID?
获取TreeView被点击行的节点ID的简便方法
嘿,这个问题我太懂啦!你现在的代码只能拿到一些基础事件参数,但TreeView本身提供了专门的方法来直接获取被点击行的节点ID,不用绕弯路。
核心思路是利用TreeView的identify方法,结合坐标转换定位点击的行:
- 先把事件里的屏幕Y坐标(
%Y)转换成TreeView组件内部的垂直坐标,用canvasy方法实现 - 再用
identify row方法传入转换后的Y坐标,就能直接拿到对应行的节点ID了
修改后的完整代码如下:
#! /usr/bin/env wish ttk::treeview .tree -selectmode none .tree tag bind clickable <ButtonRelease> { # 将屏幕Y坐标转换为TreeView组件内部的垂直坐标 set y [%W canvasy %Y] # 获取被点击行的节点ID set item_id [%W identify row $y] puts "被点击的节点ID: $item_id" } .tree configure -height 2 .tree insert {} end -id A -text A -tags clickable .tree insert {} end -id B -text B -tags clickable pack .tree
运行这段代码后,点击A行会输出被点击的节点ID: A,点击B行则输出被点击的节点ID: B,完全匹配你的需求。
如果之后需要更精细的定位(比如判断点击的是哪一列),还可以用identify column方法配合转换后的X坐标,用法和identify row类似哦。
内容的提问来源于stack exchange,提问作者Alex028502
相关产品推荐
相关产品推荐

