tkinter listbox get(ACTIVE)方法
我试图将当前选择的Listbox
项目打印出来。例如,当我选择项目“一个”时,它应该打印出“一个”,当我选择项目“两个”时,它应该打印出“两个”,等等。以下是我尝试过的。
from Tkinter import*
root=Tk()
sizex = 600
sizey = 400
posx = 40
posy = 20
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
itemsforlistbox=['one','two','three','four','five','six','seven']
def CurSelet(evt):
value=str((mylistbox.get(ACTIVE)))
print value
mylistbox=Listbox(root,width=60,height=10,font=('times',13))
mylistbox.bind('<<ListboxSelect>>',CurSelet)
mylistbox.place(x=32,y=90)
for items in itemsforlistbox:
mylistbox.insert(END,items)
root.mainloop()
我的问题是,每当我在列表框中选择一个项目时,它实际上就会打印出先前选择的项目。例如,当我在列表中选择“二”时,它就会打印出“一个”。为了使事情更清楚,请参阅以下内容
- 我选择项目“一个”,它打印出“一个”
- 我选择了项目“二”,它再次打印出“一”
- 我选择了项目“三”,它打印出“两个”,依此类推…
我想念什么吗?还是我误解了工作方式get(ACTIVE)
?
-
单击某个项目后,该项目变为活动状态,即
ListboxSelect
方法返回后。因此,您要打印出此单击 之前 处于活动状态的任何内容(通常是指您
上次 单击的内容)。另外,考虑到您多次引用“选定”,我想您想要的是 选定 值,而不是 活动 值,因此您应该提出这一要求。
对于具有
selectmode=SINGLE
或BROWSE
(默认设置,您拥有的)列表框的列表框,可以轻松地将它们都修复。只需更改此:mylistbox.get(ACTIVE)
至:
mylistbox.get(mylistbox.curselection())
如果您需要处理
MULTIPLE
或EXTENDED
,那么当然会有0到7个选择而不是1个,因此您需要执行以下操作:values = [mylistbox.get(idx) for idx in mylistbox.curselection()] print ', '.join(values)
在我们讨论过程中,我不确定您为什么这么做,
str((mylistbox.get(ACTIVE)))
甚至str(mylistbox.get(ACTIVE))
。mylistbox.get
具有单个索引的结果将是一个字符串,与您插入的字符串相同。