如何清除ttk.Treeview小部件中的项目?

Ran*_*ins 5 python syntax treeview tkinter

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)
Run Code Online (Sandbox Code Playgroud)

ingredient_list是一个显示类似......('Sugar','1 Cup')等等的列表... def用于选择的组合框,所以我想要的是树视图清除而不是只是不断添加更多的成分.不幸的是我没有看到一种clear()方法.

如果有一种程序化的方法来识别那里的东西(列举一个行数会很好......)这让我疯了.我在文档中注意到你可以使用delete方法,但它想知道要删除的项目...如果我使用:

ingredients.delete('',0)
Run Code Online (Sandbox Code Playgroud)

我明白了

TclError: Item 0 not found
Run Code Online (Sandbox Code Playgroud)

所以我认为它需要像'糖'这样的东西......

当然它是一个捕获22因为如果您选择组合框并想要清除成分树视图,相同的成分项目不在每个配方中,那么我们如何知道要删除哪些项目?...

如果您需要更多详细信息,请告诉我...我对使用treeview对象相当新,但它让我想在画布上使用两个列表框.

Kau*_*ose 7

只是让代码更简洁和Pythonic:

map(ingredients.delete, ingredients.get_children())
Run Code Online (Sandbox Code Playgroud)

  • 此外,`ingredients.delete(*ingredients.get_children())`。 (2认同)

Bry*_*ley 5

在树上插入项时,该insert方法返回项ID.这是你给delete方法的.

此外,给定项目ID(例如根项目),您可以使用该get_children方法获取其所有子项的列表.如果您不给它任何参数,get_children它将返回属于根元素的所有项的列表.然后,您可以遍历此列表以删除项目.

这些都记录在docs.python.orgtreeview文档中.

  • `x = ingredients.get_children()表示x中的项目:ingredients.delete(item)`**非常感谢Bryan!** (3认同)