【问题标题】:Tkinter: Listbox please behave yourselfTkinter:列表框请自重
【发布时间】:2013-04-01 11:10:08
【问题描述】:
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)

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

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

据我所知,第一次执行时:

loaded = ()

但之后它会返回正确的值。为什么会这样?请帮忙,谢谢:D

【问题讨论】:

    标签: python listbox tkinter execution


    【解决方案1】:

    当前选择由类绑定设置。类绑定在特定于小部件的绑定之后触发。因此,您的绑定第一次触发时没有选择。第二次触发时,它将显示之前选择的内容。

    如果您想在选择更改时执行某些操作,您应该绑定&lt;&lt;ListboxSelect&gt;&gt;。绑定它意味着无论用户单击它还是使用键盘绑定,您的代码都可以正常工作。

    【讨论】:

    • @Bryan 我发现你的回答很有用。我从 &lt;"Button-1"&gt; 更改为 &lt;&lt;ListboxSelect&gt;&gt; 并注意到我的程序变得缓慢。这会响铃吗?有什么可能导致的吗?谢谢。
    • @sedeh:不,我从来没有像你描述的那样经历过减速。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2017-12-11
    • 1970-01-01
    • 2017-07-15
    • 2021-07-13
    • 2020-04-28
    • 2013-05-14
    相关资源
    最近更新 更多