如何从树视图中删除选定的行,以及同时从列表中删除元组?
How to remove selected row from the treeview, as well as the tuple from the list at the same time?
我正在尝试删除树视图中的选定项目,并将其作为元组从列表中删除。每次我再次删除和添加项目作为元组时,删除的项目仍然存在。我认为已删除的项目在我单击删除后仍在列表中。解决方案是什么?
这是我的代码:
from tkinter import *
from tkinter import ttk
class Win1:
def __init__(self, master):
self.master = master
self.master.geometry('300x350')
self.empty_list = []
self.name = StringVar()
self.contact = StringVar()
self.lblname = Label(self.master, text='Name:').pack()
self.entryname = Entry(self.master, textvariable=self.name).pack()
self.lblcontact = Label(self.master, text="Contact number:").pack()
self.entrycontact = Entry(self.master, textvariable=self.contact).pack()
self.btnadd = Button(self.master, text="Add", command=self.add).pack()
self.btndel = Button(self.master, text="Delete select", command=self.del_select).pack()
self.t_table = ttk.Treeview(self.master)
self.t_table['column'] = ('Name', 'Contact Number')
self.t_table.column('#0', width=0, stretch=NO)
self.t_table.column('Name', width=120, minwidth=30)
self.t_table.column('Contact Number', width=100, minwidth=30)
headings = ['#0', 'Name', 'Contact Number']
txt_headings = ['', 'Name', 'Contact Number']
for i in range(len(headings)):
self.t_table.heading(headings[i], text=f'{txt_headings[i]}', anchor=W)
for x in self.empty_list:
self.t_table.insert(parent='', index='end', values=x)
self.t_table.pack(fill=X)
def add(self):
#===== Update treeview ======
for i in self.t_table.get_children():
self.t_table.delete(i)
self.empty_list.append((self.name.get(), self.contact.get()))
for data in self.empty_list:
self.t_table.insert(parent='', index='end', values=data)
def del_select(self):
selected = self.t_table.selection()
for i in selected:
for j in range(len(self.empty_list)):
if self.empty_list[j] == tuple(self.t_table.item(selected)['values']):
self.empty_list.pop(j)
self.t_table.delete(i)
def main():
root = Tk()
Win1(root)
root.mainloop()
if __name__ == '__main__':
main()
这是因为您还没有删除列表中的项目。此外,如果在空列表中附加了非字符串,则可能必须将值映射到字符串
你的 del_selected
应该是这样的:
def del_select(self):
selected = self.t_table.selection()
for i in selected:
value = tuple(map(str, self.t_table.item(i)['values']))
self.empty_list.remove(value)
self.t_table.delete(i)
我正在尝试删除树视图中的选定项目,并将其作为元组从列表中删除。每次我再次删除和添加项目作为元组时,删除的项目仍然存在。我认为已删除的项目在我单击删除后仍在列表中。解决方案是什么?
这是我的代码:
from tkinter import *
from tkinter import ttk
class Win1:
def __init__(self, master):
self.master = master
self.master.geometry('300x350')
self.empty_list = []
self.name = StringVar()
self.contact = StringVar()
self.lblname = Label(self.master, text='Name:').pack()
self.entryname = Entry(self.master, textvariable=self.name).pack()
self.lblcontact = Label(self.master, text="Contact number:").pack()
self.entrycontact = Entry(self.master, textvariable=self.contact).pack()
self.btnadd = Button(self.master, text="Add", command=self.add).pack()
self.btndel = Button(self.master, text="Delete select", command=self.del_select).pack()
self.t_table = ttk.Treeview(self.master)
self.t_table['column'] = ('Name', 'Contact Number')
self.t_table.column('#0', width=0, stretch=NO)
self.t_table.column('Name', width=120, minwidth=30)
self.t_table.column('Contact Number', width=100, minwidth=30)
headings = ['#0', 'Name', 'Contact Number']
txt_headings = ['', 'Name', 'Contact Number']
for i in range(len(headings)):
self.t_table.heading(headings[i], text=f'{txt_headings[i]}', anchor=W)
for x in self.empty_list:
self.t_table.insert(parent='', index='end', values=x)
self.t_table.pack(fill=X)
def add(self):
#===== Update treeview ======
for i in self.t_table.get_children():
self.t_table.delete(i)
self.empty_list.append((self.name.get(), self.contact.get()))
for data in self.empty_list:
self.t_table.insert(parent='', index='end', values=data)
def del_select(self):
selected = self.t_table.selection()
for i in selected:
for j in range(len(self.empty_list)):
if self.empty_list[j] == tuple(self.t_table.item(selected)['values']):
self.empty_list.pop(j)
self.t_table.delete(i)
def main():
root = Tk()
Win1(root)
root.mainloop()
if __name__ == '__main__':
main()
这是因为您还没有删除列表中的项目。此外,如果在空列表中附加了非字符串,则可能必须将值映射到字符串
你的 del_selected
应该是这样的:
def del_select(self):
selected = self.t_table.selection()
for i in selected:
value = tuple(map(str, self.t_table.item(i)['values']))
self.empty_list.remove(value)
self.t_table.delete(i)