Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从列表框中删除所选内容,以及从提供所选内容的列表中删除所选内容_Python_Tkinter_Listbox_Python 3.4 - Fatal编程技术网

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