我试着在这里搜索但没有找到正确的答案.
我有一个设置的列表框selection='multiple'.然后,我尝试通过代码获取用户选择的所有选项的列表name.get(ACTIVE).问题是它并不总是得到我在列表框GUI中突出显示的所有选项.
如果我突出显示一个,它会正确地恢复它.
如果我突出显示两个或更多(通过单击每个),它只返回我选择的最后一个项目
如果我有多个突出显示,但然后单击以取消突出显示一个,这是我点击的最后一个,即使它没有突出显示也会返回.
任何帮助都会非常棒.谢谢.我期待代码能够带回任何突出的内容.
设置列表框的代码是:
self.rightBT3 = Listbox(Frame1,selectmode='multiple',exportselection=0)
Run Code Online (Sandbox Code Playgroud)
检索选择的代码是:
selection = self.rightBT3.get(ACTIVE)
Run Code Online (Sandbox Code Playgroud)
这是应用程序在运行中的样子的屏幕截图,在顶部你可以看到控制台只注册了一个选项(我点击的最后一个).

在Tkinter列表框中获取所选项目列表的正确方法似乎是使用self.rightBT3.curselection(),它返回包含所选行的从零开始的索引的元组.然后,您可以get()使用这些索引的每一行.
(我实际上没有测试过这个)
要获取在列表框中选择的文本项列表,我发现以下解决方案是最优雅的:
selected_text_list = [listbox.get(i) for i in listbox.curselection()]
Run Code Online (Sandbox Code Playgroud)
小智 6
我发现上面的解决方案有点"模糊".特别是当我们在这里处理正在学习工艺或学习python/tkinter的程序员时.
我想出了一个更具解释性的解决方案,其中包括以下内容.我希望这对你来说更好.
#-*- coding: utf-8 -*-
# Python version 3.4
# The use of the ttk module is optional, you can use regular tkinter widgets
from tkinter import *
from tkinter import ttk
main = Tk()
main.title("Multiple Choice Listbox")
main.geometry("+50+150")
frame = ttk.Frame(main, padding=(3, 3, 12, 12))
frame.grid(column=0, row=0, sticky=(N, S, E, W))
valores = StringVar()
valores.set("Carro Coche Moto Bici Triciclo Patineta Patin Patines Lancha Patrullas")
lstbox = Listbox(frame, listvariable=valores, selectmode=MULTIPLE, width=20, height=10)
lstbox.grid(column=0, row=0, columnspan=2)
def select():
reslist = list()
seleccion = lstbox.curselection()
for i in seleccion:
entrada = lstbox.get(i)
reslist.append(entrada)
for val in reslist:
print(val)
btn = ttk.Button(frame, text="Choices", command=select)
btn.grid(column=1, row=1)
main.mainloop()
Run Code Online (Sandbox Code Playgroud)
请注意,使用ttk主题小部件是完全可选的.您可以使用普通的tkinter小部件.
| 归档时间: |
|
| 查看次数: |
26192 次 |
| 最近记录: |