本文轉載自:http://blog.csdn.net/jcodeer/article/details/1811310
#Tkinter教程之Listbox篇#Listbox為列表框控件,它可以包含一個或多個文本項(text item),可以設置為單選或多選
'''1.創建一個Listbox,向其中添加三個item'''
from Tkinter import *
root = Tk()
lb = Listbox(root)
for item in ['python','tkinter','widget']:
lb.insert(END,item)
lb.pack()
root.mainloop()
'''2.創建一個可以多選的Listbox,使用屬性selectmaod'''
from Tkinter import *
root = Tk()
lb = Listbox(root,selectmode = MULTIPLE)
for item in ['python','tkinter','widget']:
lb.insert(END,item)
lb.pack()
root.mainloop()
# 依次點擊這三個item,均顯示為選中狀態。
# 屬性MULTIPLE允許多選,每次點擊item,它將改變自己的當前選狀態,與Checkbox有點相似
'''3這個屬性selectmode還可以設置為BROWSE,可以通過鼠標來移動Listbox中的選中位置(不是移動item),這個屬性也是Listbox在默認設置的值,這個程序與1.程序運行的結果的一樣的。'''
from Tkinter import *
root = Tk()
lb = Listbox(root,selectmode = BROWSE)
for item in ['python','tkinter','widget']:
lb.insert(END,item)
lb.pack()
root.mainloop()
#使用鼠標進行拖動,可以看到選中的位置隨之變化。
# 與BROWSE相似 的為SINGLE,但不支持鼠標移動選中位置。
from Tkinter import *
root = Tk()
lb = Listbox(root,selectmode = BROWSE)
for item in ['python','tkinter','widget']:
lb.insert(END,item)
lb.pack()
root.mainloop()
#使用鼠標進行拖動,沒有任何變化
'''4.使用selectmode = EXPANDED使用Listbox來支持Shift和Control。'''
from Tkinter import *
root = Tk()
lb = Listbox(root,selectmode = EXTENDED)
for item in ['python','tkinter','widget']:
lb.insert(END,item)
lb.pack()
root.mainloop()
#運行程序,點中“python",shift + 點擊"widget",會選中所有的item
#運行程序,點中"python",control + 點擊"widget",會選中python和widget,第二項tkinter處於非選中狀態
'''5.向Listbox中添加一個item'''
# 以上的例子均使用了insert來向Listbox中添加 一個item,這個函數有兩個屬性一個為添加的索引值,另一個為添加的項(item)
# 有兩個特殊的值ACTIVE和END,ACTIVE是向當前選中的item前插入一個(即使用當前選中的索引作為插入位置);END是向
# Listbox的最后一項添加插入一項
# 先向Listbox中追加三個item,再在Listbox開始添加三項
from Tkinter import *
root = Tk()
lb = Listbox(root)
for item in ['python','tkinter','widget']:
lb.insert(END,item)
#只添加一項將[]作為一個item
#lb.insert(0,['linux','windows','unix'])
#添加三項,每個string為一個item
lb.insert(0,'linux','windows','unix')
lb.pack()
root.mainloop()
'''6.刪除Listbox中的項,使用delete,這個函數也有兩個參數,第一個為開始的索引值;第二個為結束的索引值,如果不指定則只刪除第一個索引項。'''
from Tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END,str(i))
lb.delete(1,3)
lb.pack()
root.mainloop()
#運行程序,只有值0456789,1-3被刪除
#刪除全部內容,使用delete指定第一個索引值0和最后一個參數END,即可
#lb.delete(0,END)
'''7.選中操作函數,使用函數實現。selection_set函數有兩個參數第一個為開始的索引;第二個為結束的索引,如果不指定則只選中第一個參數指定的索引項'''
from Tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END,str(i))
lb.selection_set(0,10)
lb.pack()
root.mainloop()
# 程序運行結果,選中了所有的項。 此代碼並未指定Listbox為MULTIPLE或EXTENDED,查通過selection_set仍舊可以對Listbox
#進行操作。
#與之相對的便是取消選中的函數了,參數與selection_set在參數相同,如下代碼取消索引從0-3在狀態
from Tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END,str(i))
lb.selection_set(0,10)
lb.selection_clear(0,3)
lb.pack()
root.mainloop()
'''8.得到當前Listbox中的item個數'''
from Tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END,str(i))
lb.delete(3)
print lb.size()
lb.pack()
root.mainloop()
#首先向Listbox中添加 了10個item,然后刪除索引為3在item,最后的打印結果為9,即當前的Listbox中只有9項
'''9.返回指定索引的項'''
from Tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END,str(i*100))
print lb.get(3)
lb.pack()
root.mainloop()
#返回值為300
#get也為兩個參數的函數,可以返回多個項(item),如下返回索引值3-7的值
from Tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END,str(i*100))
print lb.get(3,7)
lb.pack()
root.mainloop()
#返回值為('300', '400', '500', '600', '700'),是一個tuple類型。
'''10.返回當前返回的項的索引,不是item的值'''
from Tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END,str(i*100))
lb.selection_set(3,8)
print lb.curselection()
lb.pack()
root.mainloop()
#返回值為('3', '4', '5', '6', '7', '8'),而不是('300','400','500','600','700','800'),啞然無法直接得到各項的值,知道了索引,得到值
#就很容易了:lb.get()就可以實現。
'''11.判斷 一個項是否被選中,使用索引。'''
from Tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END,str(i*100))
lb.selection_set(3,8)
print lb.selection_includes(8)
print lb.selection_includes(0)
lb.pack()
root.mainloop()
#返回結果:True Flase,即8包含在選中的索引中,0不包含在選中的索引中
'''12.Listbox與變量綁定'''
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
v = StringVar()
lb = Listbox(root,listvariable = v)
for i in range(10):
lb.insert(END,str(i*100))
#打印當前列表中的項值
print v.get()
#輸出:('0', '100', '200', '300', '400', '500', '600', '700', '800', '900')
#改變v的值,使用tuple可以與item對應
v.set(('1000','200'))
#結果只有兩項了1000和200
lb.pack()
root.mainloop()
'''13.Listbox與事件綁定'''
# 它不支持command屬性來設置回調函數了,使用bind來指定回調函數,打印當前選中的值
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
def printList(event):
print lb.get(lb.curselection())
lb = Listbox(root)
lb.bind('<Double-Button-1>',printList)
for i in range(10):
lb.insert(END,str(i*100))
lb.pack()
root.mainloop()
#還有一個比較實用的功能沒有介紹:滾動條的添加,留到后面介紹Scrollbar的時候再一並介紹