tkinter listbox get(ACTIVE)方法

发布于 2021-01-29 17:17:06

我试图将当前选择的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()

我的问题是,每当我在列表框中选择一个项目时,它实际上就会打印出先前选择的项目。例如,当我在列表中选择“二”时,它就会打印出“一个”。为了使事情更清楚,请参阅以下内容

  1. 我选择项目“一个”,它打印出“一个”
  2. 我选择了项目“二”,它再次打印出“一”
  3. 我选择了项目“三”,它打印出“两个”,依此类推…

我想念什么吗?还是我误解了工作方式get(ACTIVE)

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    单击某个项目后,该项目变为活动状态,即ListboxSelect方法返回后。因此,您要打印出此单击 之前 处于活动状态的任何内容(通常是指您
    上次 单击的内容)。

    另外,考虑到您多次引用“选定”,我想您想要的是 选定 值,而不是 活动 值,因此您应该提出这一要求。

    对于具有selectmode=SINGLEBROWSE(默认设置,您拥有的)列表框的列表框,可以轻松地将它们都修复。只需更改此:

    mylistbox.get(ACTIVE)
    

    至:

    mylistbox.get(mylistbox.curselection())
    

    如果您需要处理MULTIPLEEXTENDED,那么当然会有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具有单个索引的结果将是一个字符串,与您插入的字符串相同。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看