我使用Python 3在Tkinter中创建了一个ttk / Treeview Widget。我想将一个对象连接到树视图中列出的名称。为了说明这一点,我创建了以下示例。
import tkinter as tk
from tkinter import ttk
class myclass:
def __init__(self, name, value):
self.name=name
self.value=value
class maintree(ttk.Treeview):
def __init__(self, master):
super().__init__(master)
self.master = master
self.my_objects= [myclass("object"+str(_), _) for _ in range(1,11)]
for my_object in self.my_objects:
self.insert("", "end", text=my_object.name)
def main():
root = tk.Tk()
maintree(root).grid()
root.mainloop()
if __name__ == '__main__':
main()
在这个例子中,我想获得与树视图中所选名称相对应的my_class实例来做某事(即显示当前所选my_class对象的值)。
我只了解商品ID,但我不知道如何将商品连接到商品本身。我觉得我对树视图应该如何运作有一些误解。
感谢您的帮助!
答案 0 :(得分:1)
insert
方法没有command
选项。但是,您可以标记每个插入的项目并将标记绑定到事件。因此,我使用对象名称作为标记,然后将其绑定以在鼠标左键单击时执行对象的某些方法。
import tkinter as tk
from tkinter import ttk
class MyClass:
def __init__(self, name, value):
self.name=name
self.value=value
def callback(self, event=None):
# event=None is a trick to be able to call the method both directly and
# from a binding (that will pass the event argument to the function)
print(self.name, self.value)
class MainTree(ttk.Treeview):
def __init__(self, master):
super().__init__(master)
self.master = master
self.my_objects= [MyClass("object"+str(_), _) for _ in range(1,11)]
for my_object in self.my_objects:
self.insert("", "end", text=my_object.name, tags=(my_object.name,))
self.tag_bind(my_object.name, '<Button-1>', my_object.callback)
def main():
root = tk.Tk()
MainTree(root).grid()
root.mainloop()
if __name__ == '__main__':
main()