Chr*_*ung 13 python tkinter widget
我试图打印出当前选中的列表框项目.例如,当我选择项目"one"时,它应该打印出"one",当我选择项目"two"时,它应该打印出"two"等.以下是我尝试过的.
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()
Run Code Online (Sandbox Code Playgroud)
我的问题是每当我在列表框中选择一个项目时,它实际上是打印出先前选择的项目.例如,当我在列表中选择项目"两个"时,它打印出"一个".为了使事情更清楚,请参阅以下内容
(1)我选择了"一"项,打印出"一"
(2)我选择了项目"two",它再次打印出"one"
(3)我选择了"三"项,打印出"两个"等等......
我错过了什么吗?还是我误解了get(ACTIVE)的工作方式?感谢您的帮助.
aba*_*ert 26
单击它后,项目将变为活动状态 - 这意味着在您的ListboxSelect方法返回后.因此,您在打印之前打印出任何活动的内容(通常意味着您上次点击的内容).
另外,鉴于你多次提到"选定",我认为你想要的是所选择的值,而不是活跃的值,所以你应该要求它.
对于带有selectmode=SINGLE或BROWSE(默认情况下,您拥有的)列表框的列表框,您可以轻松地修复这两个问题.只需改变这个:
mylistbox.get(ACTIVE)
Run Code Online (Sandbox Code Playgroud)
至:
mylistbox.get(mylistbox.curselection())
Run Code Online (Sandbox Code Playgroud)
如果你需要处理MULTIPLE或者EXTENDED,当然有0到7个选择而不是1个,所以你需要做类似的事情:
values = [mylistbox.get(idx) for idx in mylistbox.curselection()]
print ', '.join(values)
Run Code Online (Sandbox Code Playgroud)
虽然我们正在努力,但我不确定你为什么这么做,str((mylistbox.get(ACTIVE)))甚至不知道str(mylistbox.get(ACTIVE)).mylistbox.get单个索引的结果将是一个字符串,与您插入的字符串相同.
| 归档时间: |
|
| 查看次数: |
56026 次 |
| 最近记录: |