rag*_*ner 1 python treeview tkinter
iid
它的目的是当用户单击某个项目并将其打印出来时获取树视图项目的 ,但由于某种原因identify()
没有收到 event.y 变量,也许?
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()
Run Code Online (Sandbox Code Playgroud)
单击树视图中的项目后,错误为:
TypeError: identify() missing 1 required positional argument: 'y'
Run Code Online (Sandbox Code Playgroud)
为了响应 @TessellationHeckler 的评论,基于链接对代码进行的编辑不会产生错误,但仍然不会打印出iid
:
def tree_click_event(self, event):
item = self.tree.identify('item', event.x,event.y)
print (item)
Run Code Online (Sandbox Code Playgroud)
感谢您接受@CommonSense的答案,总结看来我需要使用 self.tree.bind('<1>', self.tree_click_event) 而不是 treeviewselect 来解决这个特定问题,但感谢您提供第二种方法事情也是如此
根据文档 x, y
坐标是
对于 KeyPress、KeyRelease、ButtonPress、ButtonRelease、Motion、Enter、Leave、Expose、Configure、Gravity 和 Reparent 事件有效。
因此,这里有一些调试打印问题的解决方法<<TreeviewSelect>>
(注意事件坐标!):
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()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7210 次 |
最近记录: |