【问题标题】:How to clear items from a ttk.Treeview widget?如何从 ttk.Treeview 小部件中清除项目?
【发布时间】:2012-02-08 11:19:54
【问题描述】:
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)

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

如果有一种编程方式来识别首先存在的内容(枚举行数会很好......)这让我发疯了。我确实在文档中注意到您可以使用 delete 方法,但它想知道要删除的项目...如果我使用:

ingredients.delete('',0)

我明白了

TclError: Item 0 not found

所以我会假设它想要像“糖”这样的物品...

当然是第 22 个问题,因为如果您选择组合框并想清除成分树视图,则并非每个食谱中都有相同的成分项目,那么我们如何知道要删除哪些项目?...

如果您需要更多详细信息,请告诉我...我对使用树视图对象还很陌生,但这让我只想在画布上使用两个列表框。

【问题讨论】:

标签: python syntax tkinter treeview


【解决方案1】:

为了让代码更简洁和 Pythonic:

map(ingredients.delete, ingredients.get_children())

【讨论】:

  • 不过,请确保在 Python 3 中将 list()set()tuple() 等之一包裹起来。
  • 另外,ingredients.delete(*ingredients.get_children())
【解决方案2】:

当您在树上插入一个项目时,insert 方法会返回一个项目 ID。这就是你赋予 delete 方法的内容。

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

这一切都记录在treeview docsdocs.python.org

【讨论】:

  • 啊,谢谢布莱恩!我想我看到了 get_children 方法并且不知道如何处理 I001、I002 项目,但是使用类似 I001、I002 的东西来使用类似 tree.delete('',I001) 我猜我有使用尝试/除非第一次选择组合框时不存在任何项目并且树视图中不存在任何项目。无论如何,非常感谢,重燃了我的希望。
  • x = ingredients.get_children() for item in x: ingredients.delete(item) 非常感谢布莱恩!
猜你喜欢
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
相关资源
最近更新 更多