Python 从列表框中删除所选内容,以及从提供所选内容的列表中删除所选内容
如何使用以下代码从列表框中删除所选内容并将其从包含该内容的列表中删除?列表框中的选择是我存储在列表中的词典Python 从列表框中删除所选内容,以及从提供所选内容的列表中删除所选内容,python,tkinter,listbox,python-3.4,Python,Tkinter,Listbox,Python 3.4,如何使用以下代码从列表框中删除所选内容并将其从包含该内容的列表中删除?列表框中的选择是我存储在列表中的词典 .................code.............................. self.frame_verDatabase = Listbox(master, selectmode = EXTENDED) self.frame_verDatabase.bind("<<ListboxSelect>>", self.OnDoub
.................code..............................
self.frame_verDatabase = Listbox(master, selectmode = EXTENDED)
self.frame_verDatabase.bind("<<ListboxSelect>>", self.OnDouble)
self.frame_verDatabase.insert(END, *Database.xoomDatabase)
self.frame_verDatabase.pack()
self.frame_verDatabase.config(height = 70, width = 150)
def OnDouble(self, event):
widget = event.widget
selection=widget.curselection()
value = widget.get(selection[0])
print ("selection:", selection, ": '%s'" % value)
为清晰起见进行了编辑。由于本例中的listbox
仅包含dict
对象,因此我只需eval
从listbox
中提取的值,在列表对象中获取其索引,然后将其删除
从第二条注释到打印语句的所有内容都可以在一行中完成,如下所示:
del(things[things.index(eval(l.get(selection[0])))])
如果您想发挥创意。为什么要将listbox作为参数放入delete?这样我就可以访问它了。在这个例子中我没有使用类,所以
l
在delete
中是未定义的。我本可以用global,就是我决定这么做的。在您的示例中,它没有任何参数,只需使用self访问即可。yourListbox
PS:根据提供项目的列表中的内容,您可以删除所有try除外的内容。如果您的所有项目都将是一个dict
,如您的示例所示,那么您只需执行ind=things.index(eval(value))
。在我的示例中,我使用了变量数据类型来展示它如何处理任何事情。关键是get
返回一个字符串
,因此要从列表中对其进行索引
,您需要将其转换为原始类型。然后只需小部件。删除(选择[0])
;然后从提供该项的列表中删除该项,类似于del(Database.xoomDatabase[eval(value)])
。然而,你需要在你的函数中的某个地方引用它;也许将其作为一个成员变量,并使用self
访问它。del(Database.xoomDatabase[eval(value)]会去哪里?
from tkinter import *
things = [{"dictionaryItem":"value"}, {"anotherDict":"itsValue"}, 3, "foo", ["bar", "baz"]]
root = Tk()
f = Frame(root).pack()
l = Listbox(root)
b = Button(root, text = "delete selection", command = lambda: delete(l))
b.pack()
l.pack()
for i in range(5):
l.insert(END, things[i])
def delete(listbox):
global things
# Delete from Listbox
selection = l.curselection()
l.delete(selection[0])
# Delete from list that provided it
value = eval(l.get(selection[0]))
ind = things.index(value)
del(things[ind])
print(things)
root.mainloop()
del(things[things.index(eval(l.get(selection[0])))])