gpt4 book ai didi

python - 为什么我的 ttk.Treeview 单击处理程序在 tree.focus() 上返回错误的项目?

转载 作者:太空狗 更新时间:2023-10-30 00:07:58 26 4
gpt4 key购买 nike

我有一个使用 ttk.Treeview 实例的简单脚本,我正在用文件系统树的内容填充它。我想在单击(叶)项时执行特定操作,因此我配置了一个处理程序,如下所示:

self.tree.tag_bind('#entry', '<1>', self.onClick)

onClick 方法中,我只是简单地打印出被点击的项目,如下所示:

def onClick(self, event):
item_id = str(self.tree.focus())
print 'Selected item was %s' % item_id
item = self.tree.item(item_id)
flag = '#another_tag' in item['tags']
print ' flag = %s' % flag

我发现消息比点击滞后了一个。所以我的第一次点击得到一个随机值(看起来像树的根),然后第 n 次点击打印出被点击的第 (n-1) 个项目的值。

它们是这样插入的:tree.insert(parent_id, 'end', id, text=id, tags=['#entry'])

有人知道这是 Tkinter 中的错误还是我做错了什么?

这似乎是 Ubuntu Natty 和 OS X Lion(使用默认预装版本的 Python 和 Tkinter)上的问题

最佳答案

这就是 Tkinter 设计的工作方式。小部件上的绑定(bind)在小部件类上的绑定(bind)之前被处理。它是设置所选项目的小部件类的绑定(bind)。这使得覆盖默认绑定(bind)变得非常容易,但代价是增加默认绑定(bind)变得稍微困难​​一些。

这个问题已经在这个网站上被问过几次了。 Search for "bindtags"在本网站上;绑定(bind)标签是控制事件处理顺序的机制。

在 TreeView 小部件的特定情况下,我建议绑定(bind)到 <<TreeviewSelect>>事件,将在设置选择后处理。然后您可以使用 tag_has方法来确定单击了哪种节点。

关于python - 为什么我的 ttk.Treeview 单击处理程序在 tree.focus() 上返回错误的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12023721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com