2011-12-27 71 views
4

我想单击列表框来执行功能。这是我的想法:Tkinter Listbox

from Tkinter import * 
import Tkinter 

def immediately(): 
    print Lb1.curselection() 

top = Tk() 

Lb1 = Listbox(top) 
Lb1.insert(1, "Python") 
Lb1.insert(2, "Perl") 
Lb1.insert(3, "C") 
Lb1.insert(4, "PHP") 
Lb1.insert(5, "JSP") 
Lb1.insert(6, "Ruby") 

Lb1.pack() 


Lb1.bind('<Button-1>', lambda event :immediately()) 
top.mainloop() 

但这个功能打印之前执行选择......你会看到什么是problrm当你运行该代码。

+0

的可能重复[当Tkinter的列表框选择改变获取回调?] (http://stackoverflow.com/questions/6554805/getting-a-callback-when-a-tkinter-listbox-selection-is-changed) – drevicko 2013-11-02 00:08:39

回答

8

您可以绑定到在这篇文章中描述的<<ListboxSelect>>事件:Getting a callback when a Tkinter Listbox selection is changed? 使用TKinter是该信息不似乎包含发送到处理程序的事件中有些奇怪。还要注意,没有必要创建一个lambda,简单地调用你的函数immediately,函数对象可以传递的,如下所示:

from Tkinter import * 
import Tkinter 

def immediately(e): 
    print Lb1.curselection() 


top = Tk() 

Lb1 = Listbox(top) 
Lb1.insert(1, "Python") 
Lb1.insert(2, "Perl") 
Lb1.insert(3, "C") 
Lb1.insert(4, "PHP") 
Lb1.insert(5, "JSP") 
Lb1.insert(6, "Ruby") 

Lb1.pack() 


Lb1.bind('<<ListboxSelect>>', immediately) 
top.mainloop() 
+0

非常好,tnx :) – DRdr 2011-12-27 18:35:40