2012-01-12 22 views
5
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) 

component_list là danh sách hiển thị nội dung như ... ('Sugar', '1 Cup') v.v ... Def là dành cho combobox được chọn, vì vậy điều tôi muốn là dành cho treeview để rõ ràng và không chỉ tiếp tục bổ sung thêm các thành phần. Rất tiếc, tôi không thấy phương thức clear().Làm cách nào để xóa các mục khỏi tiện ích ttk.Treeview?

Nếu có cách thức có lập trình để xác định những gì ở đó trước tiên (liệt kê một số lượng hàng sẽ là tốt ...) điều này đang thúc đẩy tôi hạt. Tôi đã thông báo trong các tài liệu mà bạn có thể sử dụng phương pháp xóa, nhưng nó muốn biết những gì các mục là để xóa ... nếu tôi sử dụng:

ingredients.delete('',0) 

tôi nhận được

TclError: Item 0 not found 

Vì vậy, tôi giả sử nó muốn thứ gì đó giống như 'Đường' như một món hàng ...

Tất nhiên nó là 22 vì nếu bạn chọn combobox và muốn xóa thành phần treeview, các thành phần tương tự không có trong mọi công thức, vì vậy làm thế nào để chúng ta biết những gì để xóa? ...

Xin vui lòng cho tôi biết nếu bạn cần thêm chi tiết ... Tôi khá mới để làm việc với đối tượng treeview, nhưng làm cho tôi muốn chỉ làm việc với hai hộp danh sách trên canvas.

+0

Gần lặp lại của (nhưng có trước) http://stackoverflow.com/questions/22812134/how-to-clear-an-entire -treeview-with-tkinter và phiên bản mới hơn này ngắn gọn hơn nhiều. Hãy xem xét tham gia lực lượng. – Ian

Trả lời

5

Khi bạn chèn một mục trên cây, phương thức insert trả về một id mục. Đây là những gì bạn cung cấp cho phương pháp xóa.

Ngoài ra, với một id mục (chẳng hạn như mục gốc), bạn có thể nhận danh sách tất cả các con của nó với phương thức get_children. Nếu bạn không đưa ra bất kỳ đối số nào cho số get_children, nó sẽ trả về một danh sách tất cả các mục thuộc về phần tử gốc. Sau đó, bạn có thể lặp qua danh sách này để xóa các mục.

Đây là tất cả tài liệu trong số treeview docs tại docs.python.org.

+0

Agh, Cảm ơn Bryan! Tôi nghĩ rằng tôi thấy rằng phương pháp get_children và không biết phải làm gì với các mục I001, I002, nhưng nó có ý nghĩa để sử dụng một cái gì đó như I001, I002 để sử dụng một cái gì đó như tree.delete ('', I001) tôi đoán id có để sử dụng thử/ngoại trừ nếu không có mục nào xuất hiện khi combobox được chọn lần đầu tiên và không có mục nào có trong treeview. Nhưng dù sao, cảm ơn rất nhiều, tái tạo hy vọng của tôi. –

+3

'x = ingredients.get_children() cho mục trong x: ingredients.delete (item)' ** Cảm ơn bạn rất nhiều Bryan! ** –

7

Để chỉ làm cho đoạn code một chút ngắn gọn hơn và Pythonic:

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

Hãy chắc chắn để bọc một trong 'list()', 'set() ',' tuple() ', vv xung quanh nó trong Python 3, mặc dù. – anonymoose

Các vấn đề liên quan