【发布时间】:2017-12-13 23:36:06
【问题描述】:
我在 tkinter 中有一个使用 python 3 的树视图。 问题是,当我绑定右键单击以获取右键单击行的行 ID 时,我最终获得了前一个事件的实际行 ID。例如,我可以右键单击“项目 1”,这将返回“”,然后我右键单击“项目 2”,它会返回“项目 1”作为 rowID。
def initTreeView(self):
self.treeView = ttk.Treeview(self.treeSectionFrame)
self.treeView.heading('#0', text='Projects')
self.treeView.grid(row=0, column=0, sticky=("N", "S", "E", "W"))
self.treeView.bind('<3>', self.rightClickMenu)
def rightClickMenu(self, event):
def hello():
print("hello!")
# create a popup menu
print(event.x, event.y)
rowID = self.treeView.identify('item', event.x, event.y)
if rowID:
menu = Menu(self.root, tearoff=0)
menu.add_command(label="Undo", command=hello)
menu.add_command(label="Redo", command=hello)
menu.post(event.x_root, event.y_root)
self.treeView.selection_set(rowID)
self.treeView.focus_set()
self.treeView.focus(rowID)
print(rowID)
else:
pass
谢谢,
[编辑]
我发现了一个肮脏的技巧,其中包括使每个项目的标签与其 id 相同,这样您就可以获取实际的 rowID。这也可以使用 value 选项来完成。
self.treeView.insert("", "end", "id-1, tags="id-1", text="Project 1")
...
rowID = self.treeView.identify('item', event.x, event.y)
rowID = self.treeView.item(rowID)["tags"] # gives you actual ID
【问题讨论】:
标签: python python-3.x tkinter event-handling treeview