如何将Tkinter Listbox选中项的索引存储至指定列表中
解决方案
你只需要修改3处核心逻辑即可实现多选索引存储:
- 给Listbox开启多选模式:默认Listbox为单选,新增
selectmode参数配置多选规则,可选tk.MULTIPLE(点击切换单条选中状态)或tk.EXTENDED(支持Shift连选、Ctrl加减选,更符合常规操作习惯) - 调整存储变量类型:将原本为int类型的
indice修改为初始空列表,用于存储多个索引 - 修改选中事件处理逻辑:
curselection()本身会返回所有选中项的索引元组,无需仅取第一个元素,直接转成列表赋值给indice即可
修改后的完整代码如下:
import tkinter as tk from tkinter.constants import RIGHT, VERTICAL, Y Ch_Output = ["a","b","c","d","e","f"] root = tk.Tk() root.title('Seleziona canale') root.geometry("400x500") var_select = [] # 如需要存储所有选中值也可改为列表 indice = [] # 修改为列表类型存储多个索引 def getElement(event): selection = event.widget.curselection() global indice global var_select # 直接获取所有选中的索引 indice = list(selection) # 对应获取所有选中的值 var_select = [event.widget.get(i) for i in indice] result.set(','.join(var_select)) # 界面显示所有选中值 print('\n选中索引:',indice,' -> 选中值:',var_select) # scroll bar------- result =tk.StringVar() my_frame = tk.Frame(root) my_scrollbar = tk.Scrollbar(my_frame, orient=VERTICAL) var2 = tk.StringVar() var2.set(Ch_Output) # list box----------- # 新增selectmode参数开启多选 my_listbox = tk.Listbox(my_frame, width=50, height=20, listvariable=var2, selectmode=tk.EXTENDED) # configure scrolbar my_scrollbar.config(command=my_listbox.yview) my_scrollbar.pack(side=RIGHT, fill=Y) my_frame.pack() my_listbox.pack(pady=15) my_listbox.bind('<<ListboxSelect>>', getElement) #Select click root.mainloop() print('\n最终选中的索引:',indice)
内容的提问来源于stack exchange,提问作者Filippo Di Santi
相关产品推荐
相关产品推荐

