Python tkinter treeview erhalten / zurück von ausgewähltem Element

Es ist gemeint, um die iid der iid Element, wenn ein Benutzer klickt auf ein Element und drucken Sie es aus, aber aus irgendeinem Grund identify() ist nicht erhalten die event.y Variable, vielleicht?

 import tkinter as tk from tkinter import ttk class App: def __init__(self): self.root = tk.Tk() self.tree = ttk.Treeview() self.tree.pack(side="top", fill="both") self.tree.bind("<<TreeviewSelect>>", self.tree_click_event) for i in range(10): self.tree.insert("", "end", text="Item %s" % i) self.root.mainloop() def tree_click_event(self, event): iid = self.tree.identify(event.x,event.y) print (iid) if __name__ == "__main__": app = App() 

Beim Anklicken eines Artikels in der Baumansicht ist der Fehler:

 TypeError: identify() missing 1 required positional argument: 'y' 

Als Antwort auf @TessellatingHeckler 's Kommentar, eine Bearbeitung an den Code auf der Grundlage der Link erstellt nicht einen Fehler, aber immer noch nicht ausdrucken die iid :

 def tree_click_event(self, event): item = self.tree.identify('item', event.x,event.y) print (item) 

Vielen Dank für die angenommene Antwort von @CommonSense in der Zusammenfassung es scheint, dass ich self.tree.bind ('<1>', self.tree_click_event) anstelle von treeviewselect für dieses besondere Problem verwenden musste, aber danke für die Bereitstellung einer zweiten Art zu tun Dinge auch

    One Solution collect form web for “Python tkinter treeview erhalten / zurück von ausgewähltem Element”

    Nach docs x, y koordinaten

    Gültig für KeyPress, KeyRelease, ButtonPress, ButtonRelease, Motion, Enter, Leave, Expose, Configure, Gravity und Reparent Events.

    Also hier ist ein wenig Workaround für Ihr Problem mit einigen Debug-Prints (Hinweis <<TreeviewSelect>> Event-Koordinaten!):

     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() self.tree.pack(side="top", fill="both") self.tree.bind('<<TreeviewSelect>>', self.tree_click_event) self.tree.bind('<1>', self.on_click) for i in range(10): self.tree.insert("", "end", text="Item %s" % i) self.root.mainloop() def tree_click_event(self, event): real_coords = (self.tree.winfo_pointerx() - self.tree.winfo_rootx(), self.tree.winfo_pointery() - self.tree.winfo_rooty()) item = self.tree.identify('item', *real_coords) print('********** tree selection event **********') print('looks like this virtual event doesnt support event coordinates') print('event.x: %d, event.y: %d' % (event.x, event.y)) print('real.x: %d, real.y: %d' % real_coords) print('clicked on', self.tree.item(item)['text']) print('******************************************\n') def on_click(self, event): item = self.tree.identify('item', event.x, event.y) print('********** tree mouse click event **********') print('clicked on', self.tree.item(item)['text']) print('event.x: %d, event.y: %d' % (event.x, event.y)) print('******************************************\n') if __name__ == "__main__": app = App() 

    Ausgabe: Ausgabe

    Python ist die beste Programmiersprache der Welt.