<p>首先,不要使用<code>lambda</code>。它对范围很窄的问题很有用,但这不是其中之一。创建一个适当的函数,它们更容易编写和维护。</p>
<p>一旦这样做,就可以调用<code>curselection</code>来获取当前选择。你说你试过了,但是你的示例代码没有显示你试过什么,所以我只能假设你做错了。</p>
<p>至于使用<code>nearest</code>的不寻常建议。。。它所说的是,您在小部件上放置的绑定发生在同一事件的默认绑定之前。设置选择的是默认绑定,因此当您绑定到单个<em>按钮单击时,您的绑定将在默认绑定更新选择之前触发。有很多方法可以解决这个问题,其中最好的方法是不点击一次就绑定,而是绑定到<code><<ListboxSelect>></code>上,在选择改变后会触发。</p>
<p>不过,你没有这个问题。由于您是在双击时绑定的,因此选择将由默认的单击绑定设置,<code>curselection</code>将返回正确的值。也就是说,除非您有自己的防止触发默认绑定的单击绑定。</p>
<p>这里有一个简单的例子,打印出选择,这样您就可以看到它是正确的。从命令行运行它,以便看到stdout:</p>
<pre><code>import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
lb = tk.Listbox(self)
lb.insert("end", "one")
lb.insert("end", "two")
lb.insert("end", "three")
lb.bind("<Double-Button-1>", self.OnDouble)
lb.pack(side="top", fill="both", expand=True)
def OnDouble(self, event):
widget = event.widget
selection=widget.curselection()
value = widget.get(selection[0])
print "selection:", selection, ": '%s'" % value
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
</code></pre>