2013-04-09 44 views
1
import Tkinter 
def selector(): 
    ... 
    selections_scroller = Tkinter.Scale(b_action, from_=0, to=len(ymls)) 
    ... 
    pos = int(selection.curselection()[0]) 
    loaded = ymls[pos] 
    stuff_loaded = True 
    p_cost.set(loaded[4]) 
    print loaded 
    ... 
def find_pos(event): 
    selector() 
selection.bind("<Button-1>", find_pos) 

现在首先要注意的是,这不是所有的代码,所以不要问是什么ymls,他们正常工作。 (他们是一堆列表里面的元组)我添加了这些部分,因为为了让列表框成功打印“加载”,我需要执行两次“find_pos”。我第一次收到以下错误:Tkinter:Listbox请表现你自己

Exception in Tkinter callback 
Traceback (most recent call last): 
... (location) ... 
pos = int(selection.curselection()[0]) 
IndexError: tuple index out of range 

据我了解,当第一次执行:

loaded =() 

但事后返回正确的值。为什么这样?请帮助并感谢:D

回答

1

当前选择由类绑定设置。该类绑定在特定于窗口小部件的绑定之后触发。所以,你的绑定第一次触发没有选择。第二次启动它将显示之前选择的内容。

如果您想在选择更改时执行某些操作,您应该绑定<<ListboxSelect>>。绑定就意味着无论用户点击它还是使用键盘绑定,您的代码都能正常工作。

+0

嘿,再次感谢:D – madprogramer 2013-04-10 03:40:16

+0

@Bryan我发现你的答案有用。我从'<"Button-1">'更改为''ListboxSelect >>'并注意到我的程序变得呆滞。那响铃吗?任何可能导致的事情?谢谢。 – sedeh 2014-08-19 18:09:52

+0

@sedeh:不,我从来没有像你所描述的那样经历一个放缓。 – 2014-08-19 18:21:14