首页 > 解决方案 > 如何删除列表框中的多个选定项目 - 使用 Python Tkinter

问题描述

为了从我的 listBox 中删除项目,我使用了一个循环,但它只删除了第一个选定的项目。我不能使用Listbox.delete(i,j,k),因为我不能将我的元组“索引”作为 Listbox.delete() 的参数传递。请需要帮助。

def App():
root=Tk()
operatorList=tk.Listbox(root,selectmode="MULTIPLE")
operatorList.pack()

#binding the Listbox
conn = sqlite3.connect('C:/Users/Stagiaire/Desktop/Ketrika/VCbase.db')
cursor=conn.cursor()
cursor.execute("SELECT operatorId,operatorName from Operator")
OpRecord=cursor.fetchall()
conn.close()
i=0
for operator in OpRecord:
    operatorList.insert(i,operator)
    i=i+1
workingOperator=[]

def CmdSelect():
    index=operatorList.curselection()
    for i in index:
        o=operatorList.get(i)
        workingOperator.append(o)
        operatorList.delete(i)
    
SelectButton=Button(root,text="Select",command=SelectCmd)   
SelectButton.pack()
root.mainloop()

标签: pythontkinterlistbox

解决方案


您实际上已经删除了您选择的项目数量,但不是您期望的项目。这是因为在您删除第一个选中项后,其余项的索引已更改。然后当你删除第二个选中的项目时,它实际上会删除它后面的项目。

您需要以相反的顺序删除项目:

def CmdSelect():
    tmp = []
    for i in operatorList.curselection()[::-1]:
        tmp.append(operatorList.get(i))
        operatorList.delete(i)
    workingOperator.extend(tmp)

推荐阅读