如何删除列表框中的多个选定项 - 使用 Python Tkinter

How to delete multiple selected item in a listBox - with Python Tkinter

为了从我的列表框中删除项目,我使用了一个循环,但它只删除了第一个选定的项目。我不能使用 Listbox.delete(i,j,k) 因为我不能将我的元组 'index' 作为参数传递给 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()

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

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

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