Как очистить элементы от виджета ttk.Treeview?

ing_scroll = Scrollbar(window1_frame1, orient=VERTICAL) ingredients = ttk.Treeview(window1_frame1, yscrollcommand=ing_scroll.set, height=5, columns=['Ingredient', 'Amount'], show="headings") ingredients.heading("Ingredient", text='Ingredient') ingredients.column("Ingredient", width=7) ingredients.heading("Amount", text='Amount') ingredients.column("Amount", width=1) ing_scroll.config(command=ingredients.yview) ing_scroll.pack(side=RIGHT, fill=Y) ingredients.pack(side=LEFT, fill='both', expand=1) def OnRecpSelect(event): DB = menu_combo.get() mytable = recipe_combo.get() ingredient_list = TKengine.pull_ingredients(DB, mytable) # NEED TO CLEAR THE INGREDIENTS TTK:TREEVIEW OBJECT HERE! for i in ingredient_list: ingre = i[1] amoun = i[2] value = ingre,amoun ingredients.insert('',0,values=value) 

Список ингредиентов – это список, который отображает что-то вроде … («Сахар», «1 кубок») и т. д. … Def – это выделение со списком, поэтому я хотел бы, чтобы дерево было очищено, а не просто продолжайте добавлять больше ингредиентов. К сожалению, я не вижу метода clear() .

Если существует программный способ определения того, что есть вначале (перечисление ряда строк было бы хорошим …), это заставляет меня сходить с ума. Я заметил в документах, что вы можете использовать метод delete, но он хочет знать, что элемент должен удалить … если я использую:

 ingredients.delete('',0) 

я получил

 TclError: Item 0 not found 

Поэтому я бы предположил, что он хочет что-то вроде «Сахар» в качестве предмета …

конечно, его уловка 22, потому что, если вы выберете combobox и хотите очистить древовидную структуру ингредиентов, те же ингредиенты ингредиентов не входят в каждый рецепт, так как мы узнаем, какие предметы удалить? …

Пожалуйста, дайте мне знать, если вам нужны какие-либо подробности … Я довольно новичок в работе с объектом treeview, но это заставляет меня просто работать с двумя списками на холсте.

2 Solutions collect form web for “Как очистить элементы от виджета ttk.Treeview?”

Когда вы вставляете элемент в дерево, метод insert возвращает идентификатор элемента. Это то, что вы даете методу удаления.

Кроме того, с учетом идентификатора элемента (например, корневого элемента) вы можете получить список всех его дочерних get_children с get_children метода get_children . Если вы не дадите аргументы get_children он вернет список всех элементов, принадлежащих корневому элементу. Затем вы можете перебрать этот список для удаления элементов.

Все это описано в документах treeview на docs.python.org .

Чтобы просто сделать код немного более кратким и Pythonic:

 map(ingredients.delete, ingredients.get_children()) 
  • Сортировка столбца дерева Tk
  • Отформатировать отдельную ячейку / элемент, а не целую строку в tkinter ttk treeview
  • Odoo / OpenERP: скрытие кнопки создания из дерева
  • Как отключить ручное изменение размера столбца дерева Tkinter?
  • Вид дерева Qt с Pyside
  • Выберите значок Treeview в python, используя seleniumwebdriver
  • GTK TreeView: 20-строчный минимальный скрипт не отображает TreeView в окне: что не так?
  • Tkinter: виджет Treeview
  • Как отредактировать стиль заголовка в Treeview (Python ttk)
  • Python - лучший язык программирования в мире.