从列表框中删除选择,以及从提供它的列表中删除它

Posted

技术标签:

【中文标题】从列表框中删除选择,以及从提供它的列表中删除它【英文标题】:Removing a selection from a listbox, as well as remove it from the list that provides it 【发布时间】:2015-09-10 00:27:35 【问题描述】:

如何使用以下代码从列表框中删除选择并将其从包含它的列表中删除?列表框中的选择是我存储在列表中的字典。

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

示例: 当我在列表框中进行选择时,会返回此数据:

selection: (2,) : ''Fecha de Entrega': '', 'Num Tel/Cel': 'test3', 'Nombre': 'test3', 'Num Orden': '3', 'Orden Creada:': ' Tuesday, June 23, 2015', 'Email': 'test3''

【问题讨论】:

【参考方案1】:
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()

为清晰起见进行了编辑。由于在这种情况下listbox 仅包含dict 对象,我只需evallistbox 中提取的值,在列表对象中获取其索引,然后将其删除。

从第二条评论到print 语句的所有内容都可以在一行中完成,如下所示:

del(things[things.index(eval(l.get(selection[0])))])

如果您想发挥创造力。

【讨论】:

为什么要把listbox作为参数放在delete里? 所以我可以访问它。在这个例子中我没有使用类,所以ldelete 中是未定义的。我本来可以使用全局的,就像我决定这样做的那样。在您的示例中,它没有任何参数,只需使用 self.yourListbox 访问它 PS:根据列表中提供项目的内容,您可以取消所有try-except 的东西。如果您的所有项目都是dict,如您的示例所示,那么您只需要做ind = things.index(eval(value))。我在示例中使用了可变数据类型来展示它如何与任何东西一起工作。关键是 get 返回一个 String 所以从你的列表到 index 它你需要将它转换成它的原始类型。 那么你只需要widget.delete(selection[0]);然后从提供它的列表中删除该项目,例如del(Database.xoomDatabase[eval(value)])。但是,您将需要在函数中的某个地方对此进行引用;也许将其设为成员变量并使用self 访问它。 del(Database.xoomDatabase[eval(value)]) 会去哪里?

以上是关于从列表框中删除选择,以及从提供它的列表中删除它的主要内容,如果未能解决你的问题,请参考以下文章

如何从外部列表框中控制 select2 选择框?

vba,如何从列表框中的工作表中删除过滤后的数据

从数据框中删除列列表[重复]

删除列表框中的多个选定项目 - 仅识别第一个选择的代码

如何使用列列表从数据框中删除多列[重复]

从 Angular 的下拉列表中删除选定的选项