【发布时间】: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 行。
【问题讨论】:
我想在 Tkinter 中删除 TreeView 中的一行。
我知道这个方法:
def delButton(self):
x = main.tree.get_children()
for item in x:
main.tree.delete(item)
删除整棵树。但我只想删除一行。我该怎么做?
此外,我还想知道如何编辑TreeView 行。
【问题讨论】:
您并没有删除整个树,您只是从根项中删除了所有子项,因为您对迭代中的每个项都使用了 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")进行编辑
试试这样的。
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'] 部分所做的。
由于您没有提供完整的代码示例,因此需要进行一些修改,因此我不知道在树视图中输入了哪些值。
【讨论】:
def delete_records(self):
selection=self.tree.selection()[0]
self.tree.delete(selection)
【讨论】: