gpt4 book ai didi

python - tkinter 列表框 get(ACTIVE) 方法

转载 作者:太空狗 更新时间:2023-10-29 17:53:42 25 4
gpt4 key购买 nike

我试图让当前选择的 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) 的工作方式?

最佳答案

一个项目在您点击它之后变为事件状态——这意味着在您的 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 的结果将是一个字符串,与您插入的字符串相同。

关于python - tkinter 列表框 get(ACTIVE) 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com