Я создал виджет ttk/Treeview в Tkinter с помощью Python 3. Я хотел бы связать объект с его именем, которое указано в древовидном представлении. Чтобы проиллюстрировать это, я создал следующий пример.Подключить объект к элементу в виджетах Treeview
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 экземпляр, соответствующий выбранному имени в TreeView, чтобы сделать что-то (т.е. отобразить значение выбранного объекта my_class).
Я знаю только об идентификаторах элементов, но я не знаю, как соединить что-то с самим предметом. У меня такое ощущение, что у меня есть неправильное представление о том, как должно работать дерево.
Я ценю вашу помощь!
Во-первых: Большое спасибо! Далее. Могу ли я расширить этот метод, чтобы обрабатывать изменения выбора другим способом (например, с помощью клавиш со стрелками)? – Benjamin
Я использую 'id (my_object)' для имени тега сейчас, так как это дает мне уникальный идентификатор для каждого объекта. Также добавление 'self.tag_bind (id (my_object), '', my_object.callback)' после строки 'self.tag_bind ... 'позволяет выполнять обратный вызов с помощью клавиатуры, которая приближается к тому, что я просил в моем предыдущий комментарий. –
Benjamin
Изучив свойства виджета Treeview, я нашел на http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Treeview-events.html, что «всякий раз, когда происходят изменения в выбор, либо с помощью элементов, которые становятся выбранными, либо становятся невыбранными, виджет генерирует событие «<< TreeviewSelect >>». Поэтому замена «» на «<< TreeviewSelect >>» должна делать то, что вы хотите. –