sco*_*awg 6 python treeview tkinter onclick ttk
我有一个简单的脚本使用一个ttk.Treeview
实例,我正在填充文件系统树的内容.我想在点击(叶子)项目时执行某个操作,所以我配置了一个像这样的处理程序:
self.tree.tag_bind('#entry', '<1>', self.onClick)
Run Code Online (Sandbox Code Playgroud)
在方法中,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
Run Code Online (Sandbox Code Playgroud)
我发现这些消息滞后于一个点击.所以我的第一次点击得到一个随机值(看起来像树的根),然后第n次点击打印出被点击的第(n-1)项的值.
它们是这样插入的:
tree.insert(parent_id, 'end', id, text=id, tags=['#entry'])
任何人都知道这是Tkinter中的错误还是我做错了什么?
这似乎是Ubuntu Natty和OS X Lion的一个问题(使用默认的预装版本的Python和Tkinter)
这就是 Tkinter 的工作方式。小部件上的绑定在小部件类上的绑定之前处理。设置所选项目的是小部件类上的绑定。这使得覆盖默认绑定变得非常容易,但代价是增加默认绑定变得稍微困难一些。
这个问题已经在这个网站上问过几次了。在本站搜索“bindtags”;bindtags 是控制事件处理顺序的机制。
在 treeview 小部件的特定情况下,我建议绑定到<<TreeviewSelect>>
事件,该事件将在设置选择后进行处理。然后,您可以使用该tag_has
方法来确定单击了哪种节点。
归档时间: |
|
查看次数: |
3582 次 |
最近记录: |