【问题标题】:Delete and Edit items in TreeView Tkinter在 TreeView Tkinter 中删除和编辑项目
【发布时间】:2015-09-10 21:24:42
【问题描述】:

我想在 Tkinter 中删除 TreeView 中的一行。

我知道这个方法:

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

删除整棵树。但我只想删除一行。我该怎么做?

此外,我还想知道如何编辑TreeView 行。

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    您并没有删除整个树,您只是从根项中删除了所有子项,因为您对迭代中的每个项都使用了 delete。 您可以使用ifstatement 来确定您想要哪个项目,或者您可以使用selected_item = tree.selection()[0] 获取所选项目并将其删除。使用.item()方法,您可以完全访问要修改的项目。示例:

    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()
    

    【讨论】:

    • 是的,但我想编辑一个选定的项目,删除它的内容,然后用新信息更新它。我在一个数组中有三个字段(“名称”、“描述”、“参考”),我想编辑所有这些字段。我怎样才能做到这一点?顺便说一句,删除功能正在工作。谢谢!
    • 您可以将这些信息保存在项目本身中并使用values=("name", "Description", "Refernce")进行编辑
    【解决方案2】:

    试试这样的。

    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)
    

    我们需要获取与所选项目相关的值,这就是tree1.item(selected_item)['values'] 部分所做的。

    由于您没有提供完整的代码示例,因此需要进行一些修改,因此我不知道在树视图中输入了哪些值。

    【讨论】:

      【解决方案3】:
          def delete_records(self):
             selection=self.tree.selection()[0] 
             self.tree.delete(selection)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        • 2020-10-30
        • 1970-01-01
        相关资源
        最近更新 更多