当前位置:首页 » 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://wb98.com/post/336.html

    << 上一篇 下一篇 >>

    湘公网安备 43011102000514号 - 湘ICP备08100508号