當前位置:首頁 ? tkinter ? 正文

tkinter.ttk組件combobox講解

今天要講的組件combobox組件是TTK組件,在tkinter模塊里是沒有這個組件的。所以創建這個組件就一定要導入ttk模塊,按ttk的要求來創建它,使用它。

combobox組件可以看成是單行文本框組件Entry和下拉菜單組件而成的,所以在文本框里,可以輸入,在菜單里也可以選擇。

在以后的ttk組件講解時,我都以下面的方式導入ttk模塊:

from tkinter import *
from tkinter.ttk import *

以這種方式導入,ttk會覆蓋跟tkinter有相同的名稱的組件類,變量,組件,所以有相同名稱的組件就要記得以ttk的方法來創建,使用了。當然,這種用通配符方式導入模塊,在使用時不用加前綴。

combobox組件的創建方法:

Combobox(父組件, 參數……)

 

參數:

  textvariable : combobox組件選擇項綁定變量值、

  value : combobox組件的選項內容,用元組方式提供

  state  : combobox組件是否可以接受輸入

 

方法:用程序選擇某一項: current(序號)

下面代碼創建一個combobox組件

from tkinter import *
from tkinter.ttk import *
 
root=Tk()
 
var=StringVar()
com1=Combobox(root,textvariable=var,
    value=('中國','美國','英國'), # 選擇列表以元組提供
    state='readonly') # 選擇項只讀
com1.pack(padx=10,pady=10)
 
com1.current(0) # 選擇某一項
 
root.mainloop()

運行結果:

1.PNG

上面的combobox組件只能選擇某一項,不用自行輸入,把參數 state=’readonly’ 去除就可以輸入了,因為組件默認是可以輸入自己的數據的。

如何得到組件已經選中的項的文本呢,根據以前學的知識,我想你應該知道用綁定的變量的get()方法,其實也可以用:組件名.get()方法。下面代碼在上面代碼基礎上增加一個按鈕,點擊按鈕,可以得到當前combobox組件的選擇項的值。

from tkinter import *
from tkinter.ttk import *
 
root=Tk()
 
var=StringVar()
com1=Combobox(root,textvariable=var,
    value=('中國','美國','英國'), # 選擇列表以元組提供
    state='readonly') # 選擇項只yfnd
com1.pack(padx=10,pady=10)
 
com1.current(0) # 選擇某一項
 
but1=Button(root,text="ok",command=lambda:print(var.get()))
but1.pack()
 
root.mainloop()

運行結果                          丶丌皛

2.PNG

 

  其實,我們也可以通過鼠標點擊combobox組件即時得到選項值,在創建時加參數 postcommand,綁定一個函數可以即時輸出選擇前的選項值,要即時得到選擇后的選項值,要借助一個虛擬事件來得到選項值。這個虛擬事件,大家要記一下:

"<<ComboboxSelected>>"  即時得到combobox選擇后的值

 

  下面的代碼,我分別用postcommand參數和虛擬事件即時得到combobox組件選擇前和選擇后的選項值。

from tkinter import *
from tkinter.ttk import *
 
from tkinter import *
from tkinter.ttk import *
 
def com1selection1():
    print('選擇前:',var.get())
def com1selection2(event):
    print('選擇后:',com1.get())
    print('選擇項序號:',com1.current())
 
root=Tk()
 
var=StringVar()
com1=Combobox(root,textvariable=var,
    value=('中國','美國','英國'), # 選擇列表以元組提供
    state='readonly', postcommand=com1selection1) # 選擇項只讀
com1.pack(padx=10,pady=10)
 
com1.current(0) # 選擇某一項
 
com1.bind("<<ComboboxSelected>>",com1selection2) # 綁定虛擬事件
 
root.mainloop()

運行后,點擊組件輸出:

選擇前: 中國

如果選擇的是第3項,則輸出:

選擇后: 英國

選擇項序號:2

  

在上面的代碼里,我們用com1.current(0)選擇第1項為默認的選擇項,如果參數為空,com1.current()的返回值就是選擇項的序號。

 

combobox組件也可以綁定滾動條,這樣,選項值文本比較長,就可以利用滾動條來查看了。

以下代碼就綁定了一個水平滾動條。

from tkinter import *
from tkinter.ttk import *
 
def com1selection2(event):
    print('選擇了:',com1.get())
 
root=Tk()  # 源碼來自 wb98.com
 
var=StringVar()
a=('中國','美國','英國','全宇宙第一強國,誰也無法超越的超級大國,你誰呀?')
com1=Combobox(root,value=a,) 
com1.pack(padx=10,pady=(10,1))
 
# com1.current(0) # 選擇某一項
com1.set(a[0]) # 也可以這樣來默認選擇一項
 
com1.bind("<<ComboboxSelected>>",com1selection2) # 綁定虛擬事件
 
scr2=Scrollbar(orient=HORIZONTAL) # 水平滾動條
scr2.pack(fill=X,padx=10,pady=(0,10))
 
com1.config(xscrollcommand = scr2.set) # combobox綁定滾動條設置
scr2.config(command =com1.xview) # 滾動條綁定combobox滾動設置
 
root.mainloop()

運行結果

3.PNG

 

我們也可以改變combobox組件的長度,創建時加上參數width,單位是字符,默認是20個字符。

我們可以用綁定的變量,如var.set(‘文本值’)來設置combobox組件上的輸入文本,此外,還有另外一種方法:com1.set(‘文本值’)  達到的效果是一樣的。

from tkinter import *
from tkinter.ttk import *
 
root=Tk()
 
var=StringVar()
a=('中國','美國','英國')
com1=Combobox(root,textvariable=var,value=a,width=40) # 改默認20個字符寬為40
com1.pack(padx=10,pady=(10,1))
 
# com1.current(0) # 選擇某一項
com1.set(a[0]) # 也可以這樣來默認選擇一項
 
but1=Button(root,text="ok",command=lambda:var.set("日本"))
# but1=Button(root,text="ok",command=lambda:com1.set("日本")) # 這個方法也一樣
but1.pack()
 
root.mainloop()

運行結果

4.PNG

 

暫時沒有更多的知識要講解了,我下一文章講解一個很簡單的ttk組件:Separator (分割線)

此文章來自:wb98.com  網站還有相關的系列課程文章,感興趣的可以前往。



來源:濟亨網

本文鏈接:http://www.chinaengraver.com/post/336.html

    << 上一篇 下一篇 >>

    湘公網安備 43011102000514號 - 湘ICP備08100508號

    2019年秋霞鲁丝片瓜皮_导航亚洲AV日韩AV永久无码_有没有哪些可以看片的免费的_国产色妞妞在线视频免费播放