python tkinter组件的Listbox的用法,见下面代码的演示:
1 from tkinter import * 2 3 root=Tk() 4 v=StringVar() 5 #Listbox与变量绑定' 6 lb1=Listbox(root,listvariable=v) 7 v.set(('10','20','30','40','50')) 8 print(v.get()) 9 lb1.pack() 10 11 #.创建一个可以多选的Listbox,使用属性selectmaod' 12 lb2=Listbox(root,selectmode=MULTIPLE) 13 for item in range(10): 14 lb2.insert(END,str(item)) 15 # 有两个特殊的值ACTIVE和END,ACTIVE是向当前选中的item前插入一个 16 # (即使用当前选中的索引作为插入位置);END是向 17 # Listbox的最后一项添加插入一项 18 19 lb2.delete(1,3) 20 #删除全部内容,使用delete指定第一个索引值0和最后一个参数END,即可 21 lb2.pack() 22 23 #这个属性selectmode还可以设置为BROWSE,可以通过鼠标来移动Listbox中的选中位置 24 # (不是移动item), 25 #这个属性也是Listbox在默认设置的值,这个程序与1.程序运行的结果的一样的 26 scrollbar=Scrollbar(root) 27 scrollbar.pack(side=RIGHT,fill=Y) 28 lb3=Listbox(root,selectmode=BROWSE,yscrollcommand=scrollbar.set) 29 for item in range(20): 30 lb3.insert(END,str(item)) 31 lb3.pack(side=LEFT,fill=BOTH) 32 scrollbar.config(command=lb3.yview) 33 34 #将一个垂直方向的Scrollbar和listboxs/canvases/text fields这些控件结合起来, 35 # 你只需要按照下面的步骤即可: 36 #1.将这些控件的yscrollcommand选项设置为scrollbar的set方法。 37 #2.将scrollbar的command选项设置为这些控件的yview方法。 38 39 print(lb3.size()) 40 print(lb3.get(3)) 41 print(lb3.get(3,7)) 42 lb3.selection_set(0,10) 43 lb3.selection_clear(0,3) 44 lb3.pack() 45 46 47 def printlist(event): 48 print(lb4.get(lb4.curselection())) 49 50 51 #使用selectmode = EXPANDED使用Listbox来支持Shift和Control 52 lb4=Listbox(root,selectmode=EXTENDED) 53 lb4.bind('<Double-Button-1>',printlist) 54 for item in ['python','tkinter','widget']: 55 lb4.insert(END,item) 56 lb4.pack() 57 58 59 root.mainloop()
再来一个实例:
在下面这个例子中,点击Listbox的项目,输出索引号。
1 from tkinter import * 2 3 class make_list(Listbox): 4 def __init__(self,master, **kw): 5 frame = Frame(master) 6 frame.pack() 7 self.build_main_window(frame) 8 9 kw['selectmode'] = SINGLE 10 Listbox.__init__(self, master, kw) 11 master.bind('<Button-1>', self.click_button) 12 master.curIndex = None 13 14 def click_button(self, event): 15 ##this block works 16 w = event.widget 17 index = int(w.curselection()[0]) 18 value = w.get(index) 19 print(value) 20 ##this doesn't 21 self.curIndex = self.nearest(event.y) 22 print(self.curIndex) 23 self.curIndex = event.widget.nearest(event.y) 24 print(self.curIndex) 25 26 #display the window, calls the listbox 27 def build_main_window(self, frame): 28 self.build_listbox(frame) 29 30 #listbox 31 def build_listbox(self, frame): 32 listbox = Listbox(frame) 33 for item in ["one", "two", "three", "four"]: 34 listbox.insert(END, item) 35 listbox.insert(END, "a list entry") 36 listbox.pack() 37 return 38 39 if __name__ == '__main__': 40 tk = Tk() 41 make_list(tk) 42 tk.mainloop()
如果对于Tkinter的事件绑定不太熟悉,可以参见下面这篇教程:
python tkinter教程-事件绑定