将对象连接到 Treeview 小部件中的项目
Connect an Object to an item in a Treeview Widget
我使用 Python 在 Tkinter 中创建了一个 ttk/Treeview 小部件 3. 我想将一个对象连接到它在树视图中列出的名称。为了说明这一点,我创建了以下示例。
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,但不知道如何将某些东西与项目本身联系起来。我感觉我对 treeview 应该如何工作有一些误解。
感谢您的帮助!
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()
我使用 Python 在 Tkinter 中创建了一个 ttk/Treeview 小部件 3. 我想将一个对象连接到它在树视图中列出的名称。为了说明这一点,我创建了以下示例。
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,但不知道如何将某些东西与项目本身联系起来。我感觉我对 treeview 应该如何工作有一些误解。
感谢您的帮助!
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()