Treeview调用selection_set()高亮行后如何获取对应行的iid?
解决Treeview selection_set()后无法通过focus()获取iid的问题
嘿,我懂你碰到的这个小坑了——你用selection_set()高亮了Treeview的特定行,但调用tv.focus()却拿不到对应的iid,对吧?这其实是因为Treeview的「选中状态」和「焦点」是两个独立的东西:selection_set()只是把目标行标记为选中高亮,但并没有把控件的焦点转移到这个项目上,所以默认focus()会返回空值。
给你两个实用的解决方案,看你需求选:
方案1:直接获取选中集合(最省事)
既然你已经用selection_set('0')指定了要选中的行,那完全可以通过tv.selection()来获取当前选中的所有iid。这个方法会返回一个包含选中项iid的元组,单选场景下取第一个元素就行:
tv4.selection_set('0') # 获取选中的iid集合 selected_items = tv4.selection() if selected_items: target_iid = selected_items[0] print(target_iid) # 这里会输出 '0'
方案2:手动设置焦点后再获取
如果你确实需要让焦点落在目标行上(比如后续要做键盘导航相关的操作),那可以在selection_set()之后,手动调用focus()并传入目标iid,之后再调用tv.focus()就能拿到结果了:
tv4.selection_set('0') # 手动把焦点设置到目标iid上 tv4.focus('0') # 现在调用focus()就能返回对应的iid了 print(tv4.focus()) # 输出 '0'
简单总结下:selection_set()管的是「哪些行被选中高亮」,focus()管的是「当前哪个行拥有焦点」,两者互不影响。所以要么直接从选中集合里取iid,要么手动把焦点绑定到目标行再获取。
内容的提问来源于stack exchange,提问作者VinosityHD
相关产品推荐
相关产品推荐

