Python Tkinter中定位删除Listbox指定字符串报错求助
解决Tkinter Listbox判断元素并删除的错误
首先,咱们来拆解你遇到的问题:
- 你尝试直接用
'bye' in listboxz判断元素是否存在,这是不对的——listboxz是Tkinter的Listbox控件对象,不是普通的Python列表,直接用in操作符会触发控件内部的配置项读取逻辑,这就是你看到那个TypeError的原因。 - 另外你代码里还有个笔误:
listboxx.delete()里的listboxx应该是listboxz,而且delete()方法必须要指定要删除的元素索引,不能空调用。
下面是修正后的完整代码,我会标注关键修改点:
from tkinter import * import tkinter as tk root = tk.Tk() listboxz = Listbox(root, height=40, width=150, bg='pink') listboxz.pack(side=tk.LEFT, fill='both', expand=True) listboxz.insert(END, 'hi','bye','see') # 关键修改1:获取Listbox中的所有元素,转为可判断的列表 all_items = listboxz.get(0, tk.END) if 'bye' in all_items: # 关键修改2:找到元素对应的索引,然后删除 item_index = all_items.index('bye') listboxz.delete(item_index) root.mainloop()
如果你的Listbox里可能有重复的元素,上面的方法只会删除第一个匹配的。如果要删除所有匹配的,可以倒序遍历索引(避免删除后索引偏移):
# 删除所有匹配'bye'的项 for index in reversed(range(listboxz.size())): if listboxz.get(index) == 'bye': listboxz.delete(index)
这样就能正确判断并删除Listbox里的指定元素啦。
内容的提问来源于stack exchange,提问作者coderoftheday




