Tkinter教程之Listbox篇


# 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()
=  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的時候再一並介紹

# author:     jcodeer
#
blog:    jcodeer.cublog.cn
#
email:    jcodeer@126.com
 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



Tkinter教程之Listbox篇 Tkinter教程之Entry篇 Tkinter教程之Text(2)篇 Tkinter教程之Entry篇 Tkinter教程之Canvas(2)篇 Tkinter教程之Button篇 Tkinter教程之Menu篇 Tkinter教程之Canvas篇(4) Tkinter教程之Scale篇 Tkinter教程之Font篇
 
粤ICP备14056181号  © 2014-2021 ITdaan.com