Как очистить элементы из виджета ttk.Treeview? - PullRequest
5 голосов
/ 12 января 2012
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)

attribute_list - это список, который отображает что-то вроде ... ('Sugar', '1 Cup') и т. Д. ... def - это выбранный комбинированный список, поэтому я хотел бы, чтобыдерево, чтобы очистить, а не просто добавлять больше ингредиентов.К сожалению, я не вижу clear() метода.

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

ingredients.delete('',0)

Я получу

TclError: Item 0 not found

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

, конечно, это уловка 22, потому что если вы выберете комбо-бокс и захотите очистить дерево ингредиентов, те же элементыне в каждом рецепте, так как мы узнаем, какие элементы нужно удалить? ...

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

Ответы [ 2 ]

7 голосов
/ 23 июня 2013

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

map(ingredients.delete, ingredients.get_children())
5 голосов
/ 12 января 2012

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

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

Все это задокументировано в древовидных документах на docs.python.org .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...