所以我刚刚遇到这个问题,现在它让我疯了几个小时......
我有一个Listbox
,上面有几个项目。我将绑定的<<ListboxSelect>>
事件绑定到名为onSelected
的函数。
此功能应该打印已选中的项目,但问题就在这里。它打印最后一个活动项而不是新项。
这里是一个例子: 我有2个项目,Item1和Item2,我按以下顺序选择它们:
的Item1-项目2-项目1-项目2-项目1
这是输出:
的Item1-项目1-项目2-项目1-项目2
显然第一个有效,但从那里开始,事件就会在“活跃”之前被抛出。项目已更新并打印最后一个活动的&#39;项目。显然,如果我点击两次相同的项目,它按预期工作。
有解决方法吗?我尝试使用update_idletasks()
等待列表框更新,但没有解决问题。
我能在这做什么?
提前致谢!
编辑:
有人要求代码......:
self.phase = tk.Listbox(self, exportselection = False, selectmode='single')
self.phase.bind('<<ListboxSelect>>', self.onselect)
def onselect(self, evt):
print(self.phase.get('active'))
print(self.phase.select_includes(self.phase.index('active')))
请注意,除第一个打印件外,第二个打印件始终为False。
答案 0 :(得分:0)
&#34;活跃&#34;元素与选择不同,并在按钮释放时更新。你是正确的,活动元素可能落后于当前选择。按下按钮可更新所选项目。实际上,点击按钮时活动元素的更新没有记录,因此它可能是特定于平台的。活动元素主要用于使用键盘导航列表框,并且在使用鼠标时并不特别相关。
如果您关心获取所选项目,请使用curselection
。如果您真正关心活动元素,则必须绑定到<ButtonRelease>
并排列绑定标记,以便在tkinter类绑定之后进行绑定。