【发布时间】:2017-09-26 14:52:18
【问题描述】:
我正在尝试在选择事件时返回 tkinter 树视图选择的父项,因此如果选择更改为“子项”,我希望它打印“父项”,下面的工作示例,当前它打印选择项,而不是选择的父级:
try:
import tkinter as tk
import tkinter.ttk as ttk
except ImportError:
import Tkinter as tk
import ttk
class App:
def __init__(self):
self.root = tk.Tk()
self.tree = ttk.Treeview(selectmode='browse')
self.tree.pack(side="top", fill="both")
self.tree.bind('<<TreeviewSelect>>', self.tree_select_event)
self.parent_iid = self.tree.insert("", "end", text="Parent")
self.child_iid = self.tree.insert(self.parent_iid, "end", text="Child")
self.root.mainloop()
def tree_select_event(self, event):
print (self.tree.item(self.tree.selection()[0])['text'])
if __name__ == "__main__":
app = App()
当前在选择 Child 时打印:
"Child"
选择孩子时的期望输出:
"Parent"
【问题讨论】:
-
您阅读过任何文档吗?获取项目的父项的方法已记录在案。
-
@BryanOakley 是的,但它需要所选项目的 iid .parent(iid) 并且我试图在树视图中涵盖鼠标单击选择和箭头键选择项目,但我看不到如何我从文档中的箭头键释放事件中获取项目的 iid。所以我使用 .bind('>') 来涵盖两者,我只能使用此事件返回所选项目的文本,所以很难,有多个 ID(具有相同的名称但不同的 iid)具有不同parents 获取 ID 的父级
-
我不明白你的回答。您有可以返回 id 的代码。有一种方法接受一个 id 并返回一个父级。我不确定是什么问题。
-
@BryanOakley 是的,我意识到 .selection() 也返回一个 iid,我在其他地方读到它只是从树视图返回文本值,抱歉