非凡 发表于 2022-2-18 17:05:20

listbox中如何同时删除选中的多列

from tkinter import *

root = Tk()

thelb = Listbox(root,selectmode=MULTIPLE)

for i,item in enumerate(['公鸡','母鸡','小鸡','火鸡','战斗机']):
    thelb.insert(i,item)

thebutton= Button(root,text='删除',command=lambdax = thelb:x.delete(ACTIVE))

thebutton.pack()

mainloop()

我想法是,在listbox中,通过一个按钮,同时删除我选中的不连续的多行内容。但我上面这找到的代码只能做到删除单行。

在网上找了listbox的delete方法的参数是delete(first, last=None),那上面代码中的ACTIVE又是起什么作用的?

ba21 发表于 2022-2-18 21:34:38

ACTIVE #当前活动状态项目(也就是说当前选中项)

curselection()
-- 返回一个元组,包含被选中的选项的序号(从 0 开始)
-- 如果没有选中任何选项,返回一个空元组

def delSelected(lb):
    while True:
      lst = lb.curselection()
      if lst:            
            lb.delete(lst)
      else:
            break

thebutton= Button(root,text='删除',command=lambda:delSelected(thelb) )

非凡 发表于 2022-2-18 22:06:00

ba21 发表于 2022-2-18 21:34
ACTIVE #当前活动状态项目(也就是说当前选中项)

curselection()


感谢指教.

还有不理解的地方想再次请教下,
Listbox.delete(first, last=None),只有两个限定起始范围的参数,1、为什么又能用上ACTIVE。2、那除了这个ACTIVE参数是不是还有其他与这相同用法的参数?

非凡 发表于 2022-2-18 22:16:05

本帖最后由 非凡 于 2022-2-18 22:17 编辑

ba21 发表于 2022-2-18 21:34
ACTIVE #当前活动状态项目(也就是说当前选中项)

curselection()


thebutton= Button(root,text='删除',command=lambda:delSelected(thelb) )

这里为什么一定要使用lambda,当我删掉lambda的时候,按钮失效了?这是为什么?这里更匿名函数有什么关系?是不是要给函数加参数的原因
页: [1]
查看完整版本: listbox中如何同时删除选中的多列