五笔打字通主页
今天要讲的组件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()
运行结果:
上面的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()
运行结果 丶丌皛
其实,我们也可以通过鼠标点击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()
运行结果
我们也可以改变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()
运行结果
暂时没有更多的知识要讲解了,我下一文章讲解一个很简单的ttk组件:Separator (分割线)
此文章来自:wb98.com 网站还有相关的系列课程文章,感兴趣的可以前往。
来源:济亨网
本文链接:https://wb98.com/post/336.html