私はpython 3を使用してtkinterでtreeviewを持っています。 問題は、右クリックした行の行IDを取得するために右クリックをバインドすると、直前のイベントの実際の行IDを取得します。たとえば、「Project 1」を右クリックすると「Project 2」を右クリックし、「Project 1」をrowIDとして返します。私はあなたが実際のROWIDを取得することができますので、そのIDと同じ各項目のタグを作るから成り汚いハックを見つけたTkinter右クリックイベントのTkinter Treeviewの識別結果は直前の右クリックされた行を返す
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
おかげで、
[EDIT]
。これは、valueオプションを使用して行うこともできます。
...
rowID = self.treeView.identify('item', event.x, event.y)
print(rowID)
...
を...しかし、もちろん、これはあなたから期待しているものではありません。
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
ありがとうございます。どのようにそれを反転させると、それは機能するのですか? –
@私はLegendです。イベントキューに何らかのオーバーラップがあります(私はそれを前提としています)。メニューが表示されている間にユーザーがメニューとやり取りでき、コード実行がブロックされているため、 'tkinter'がmainloopに戻ります。とにかく私は私の答えを若干更新しました。 – CommonSense