python tkinter Listbox用法

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教程-事件绑定

 

posted @ 2017-12-29 22:29  猪悟能  阅读(31216)  评论(0编辑  收藏  举报