python - 如何删除列表框中的多个选定项目 - 使用 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()
解决方案
您实际上已经删除了您选择的项目数量,但不是您期望的项目。这是因为在您删除第一个选中项后,其余项的索引已更改。然后当你删除第二个选中的项目时,它实际上会删除它后面的项目。
您需要以相反的顺序删除项目:
def CmdSelect():
tmp = []
for i in operatorList.curselection()[::-1]:
tmp.append(operatorList.get(i))
operatorList.delete(i)
workingOperator.extend(tmp)
推荐阅读
- vba - Excel复制范围并粘贴到可用的特定范围内并打印
- c - 如何计算C中文本文件中每行的字数
- c - 用户定义函数即使不应该返回 0
- c# - UWP/C# 将所选颜色应用于 NavigationView
- r - 在 R 中将小时和分钟添加到 24 小时时间
- php - cron 作业不检索网页内容?
- python - 如果方法属性不在 __init__ 中,如何添加它
- crystal-reports - 将报表导出为包含阿拉伯字符的 PDF 时出现 Crystal Report 问题
- java - 从 Firebase - Java - orderByKey 中删除共享同一个孩子的多个数据
- javascript - 为什么我的 JavaScript 对于这个 Scrambles 任务来说太慢了?