我希望能够在使用selectmode = MULTIPLE时删除所有选定的项目。 我试图删除但它只删除最后选择的项目。有没有办法删除所有项目。
由于
from tkinter import *
def abc():
listbox.delete(ACTIVE)
def xyz():
z=listbox.get(0, END)
print (z)
master = Tk()
scrollbar = Scrollbar(master,orient=VERTICAL)
listbox = Listbox(master, yscrollcommand=scrollbar.set, selectmode=MULTIPLE)
scrollbar.config(command=listbox.yview)
b = Button(master, text="delete", command=abc)
b.pack(side=RIGHT)
b2 = Button(master, text="save", command=xyz)
b2.pack(side=RIGHT)
scrollbar.pack(side= RIGHT, fill=Y)
listbox.pack(side=LEFT)
for item in ["one", "two", "three", "four", "five"]:
listbox.insert(END, item)
mainloop()
答案 0 :(得分:5)
要获取所有选定项而不是最后一项,可以使用listbox.curselection()
然后逐个删除它们,从最后一项开始,以便删除不修改其他项的索引
def abc():
sel = listbox.curselection()
for index in sel[::-1]:
listbox.delete(index)
顺便说一下,我建议你为你的功能提供有意义的名字(比如“删除”而不是“abc”)。
答案 1 :(得分:3)
只有一半的选定项目被删除。
我认为每次删除后都会重新创建索引,因此重新分配给已删除索引的项目不会被删除。
项目索引:删除0后的0,1,2,3变为0,1,2,然后认为0已被删除,因此删除了1。删除1后,索引为0,1-两者都已删除,因此没什么要删除的。
答案:诀窍是按照相反的顺序删除所选项目,以使列表中较早的项目不会被delete重新索引:
def call_delete():
selection = listBox.curselection()
for i in reversed(selection):
listBox.delete(i)
答案 2 :(得分:-1)
编辑更好的答案不是这个,而是留在这里的文档和网址。查看https://stackoverflow.com/a/44818820/1141389
看看here for more info on Listbox wiget
您可以使用
清除整个列表框listbox.delete(0, END)
如果您只想删除所选项目,我认为您可以执行以下操作:
def abc():
items = map(int, listbox.curselection())
for item in items:
listbox.delete(item)
但请注意,我目前无法对此进行测试。试试上面的内容并查看网站,这将使您走上正确的轨道。