Delete and Edit items in TreeView Tkinter

ε祈祈猫儿з 提交于 2021-01-20 18:24:05

问题


I want to delete a single row in a TreeView in Tkinter.

I know that this method:

def delButton(self):
    x = main.tree.get_children()
    for item in x:
        main.tree.delete(item)

deletes the whole tree. But I want to delete only one row. How can I do this?

Moreover, I want to know how to edit a TreeView row as well.


回答1:


You are not deleting the whole tree you are just deleting all children from the root item, because you use delete for each item in your iteration. You can use a ifstatement to determine which item you want, or you can get the selected item with selected_item = tree.selection()[0] and delete it. With the .item()method you can full access to the item for modification. Example:

from Tkinter import Tk, Button
import ttk


root = Tk()

tree = ttk.Treeview(root)

tree["columns"]=("one","two")
tree.column("one", width=100 )
tree.column("two", width=100)
tree.heading("one", text="coulmn A")
tree.heading("two", text="column B")

tree.insert("" , 0,    text="Line 1", values=("1A","1b"))

id2 = tree.insert("", 1, "dir2", text="Dir 2")
tree.insert(id2, "end", "dir 2", text="sub dir 2", values=("2A","2B"))

##alternatively:
tree.insert("", 3, "dir3", text="Dir 3")
tree.insert("dir3", 3, text=" sub dir 3",values=("3A"," 3B"))

def edit():
    x = tree.get_children()
    for item in x: ## Changing all children from root item
        tree.item(item, text="blub", values=("foo", "bar"))

def delete():
    selected_item = tree.selection()[0] ## get selected item
    tree.delete(selected_item)

tree.pack()
button_del = Button(root, text="del", command=delete)
button_del.pack()
button_del = Button(root, text="edit", command=edit)
button_del.pack()

root.mainloop()



回答2:


Try something like this.

def delete(event):
    print('delete')
    selected_item = tree1.selection()[0]
    values = tuple(tree1.item(selected_item)['values'])
    print(dir(selected_item))
    print(selected_item)
    print(values)
    conn2 = sq.connect('Clients.db')
    c2 = conn2.cursor()
    query = "DELETE FROM clients WHERE name=? AND phone=?"
    c2.execute(query,(*values))
    conn2.commit()
    tree1.delete(selected_item)

We need to get the values associated with the selected item which is what the tree1.item(selected_item)['values'] section does.

Will need some modifications since you didn't provide a complete example of your code so I don't know what values are entered in to the treeview.




回答3:


    def delete_records(self):
       selection=self.tree.selection()[0] 
       self.tree.delete(selection)


来源:https://stackoverflow.com/questions/32511843/delete-and-edit-items-in-treeview-tkinter

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!