第15章 Combobox
Combobox是下拉框控件。由一个输入框、下拉按钮组成。当点击下拉按钮之后,会弹出下拉列表,用户选择相应的选项后,下拉列表会收起,用户选择的选项会出现在输入框中。Combobox不是定义在tkinter中的控件,而是定义在ttk中的一个控件。Combobox不是继承的Widget类,而是继承了Entry类,因此可以把Combobox当成是Entry类的扩展。
下拉框控件和列表框控件非常类似,不过只显示为一个输入框,更省窗口空间。

15.1 属性

属性描述
class_设置创建的Combobox实例的名字
cursor鼠标位于Combobox的形状
exportselection决定是否可以复制选中的文本内容。如果exportselection=True,表示可以。exportselection=False,表示不可复制列表框中选中的选项
height下拉列表的行数。默认值是20
justify输入框中的对齐方式。
postcommand下拉列表弹出前的回调函数。用于动态改变下拉列表内容。
takefocus能够使用Tab获得输入焦点
values 设置下拉列表的值
width定义输入框的宽度。默认值是20。下拉箭头的宽度是固定的,不可调整。
15.1.1 class_
设置创建的Combobox的名字。这个名字只能在创建实例的时候赋值,不能动态更改。
15.1.2 cursor
鼠标位于Combobox控件时的形状。具体的关于cursor的介绍见3.3.6节。不过此属性对combobox不起作用,鼠标的形状不会发生改变。
15.1.3 exportselection
决定是否可以复制选中的文本内容。如果exportselection=True,表示可以。exportselection=False,表示不可复制选中的选项。不过此属性对于Combobox控件不起作用。
15.1.4 height
确定下拉列表的行数或者项目数。默认值是20,如果超过这个默认值,会自动出现滚动条。如果项目数没有到height设定的值,会显示实际的行数。也就是说不会出现空白行,比如行数是10,就不会出现10个待选项+10个空白行的情况,下拉列表只显示10个待选项。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')

b1=ttk.Combobox(root,height=3,
                values=('1','2','3','4','5','6'))
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
15.1.5 justify
输入框中的文字对齐方式。只有当文本内容的长度小于输入框框的长度才有效。默认是左对齐tk.LEFT。其他的2个对齐方式是tk.CENTER(居中)和tk.RIGHT(右对齐)。

import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')

b1=ttk.Combobox(root,justify=tk.RIGHT,
                values=('1','2','3','4','5','6'))
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
15.1.6 postcommand
定义下拉列表弹出前的回调函数,用于动态改变下拉列表内容。

import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.geometry('320x240')
b2=tk.Entry(root)
def change():
    b1['values']=b2.get().split(';')
b1=ttk.Combobox(root,postcommand=change)
b1.pack()
b2.pack()
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
说明:回调函数把输入框中的字符串分隔后,动态调整下拉列表的内容。
15.1.7 style
ttk中的控件,没有了设置背景色、前景色等属性,所有的这些都通过style来设置。详细说明见后面的章节。
15.1.8 takefocus
设置能否使用Tab键获得输入焦点。默认是True。
15.1.9 validate和validatecommand
设置验证回调函数,用以验证输入框中的内容是否符合要求。详细的说明见第六章Entry中的有关说明。
15.1.10 values
设置下拉列表的值。该参数可以动态调整。见15.1.6 postcommand的说明。

15.1.11 width
定义输入框的宽度,默认值是20。注意,这个参数只能调整输入框的宽度,不能调整下拉按钮的宽度。在计算真个下拉框控件的宽度的时候,要把这两个数值加在一起。
15.2 方法

方法描述
current(newindex=None)(1)返回newindex的值,并将输入框中的内容修改返回的值
(2)返回与输入框中数值相匹配的下拉列表选项的行号或者索引。如果没有匹配的则返回-1。
set(value)设置输入框中的文本
15.2.1 current(newindex=None)
current 方法的功能:
(1)没有任何参数
返回输入框中的内容在下拉列表中的行号。如果输入框中的内容不与下拉列表中的任何一项相匹配,返回-1。
(2)如果有参数,返回索引所代表的行的内容,该选项会出现在输入框中。不返回任何参数。
import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.geometry('320x240')
b1=ttk.Combobox(root,value=('1','2','3','4','5'))
b1.pack()
b3=tk.Label(root,text='结果:')
def current():
    b3['text']='结果:'+str(b1.current())
    
b2=tk.Button(root,text='Current',command=current)
b2.pack()
b3.pack()
root.mainloop()

结果:
在这里插入图片描述
如果将 b3[‘text’]=‘结果:’+str(b1.current()) 修改为 b3[‘text’]='结果: '+str(b1.current(newindex=2)),可以看到在下拉框控件中的输入框中的内容修改为下拉列表的第三项。
在这里插入图片描述
15.2.2 set(value)
设置输入框中的文本。调用该函数后,在输入框显示value指定的值。注意,value可以不是下拉列表中的值。

import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.geometry('320x240')
b1=ttk.Combobox(root,value=('1','2','3'))
b1.pack()
def set1():
    b1.set('3')
b2=tk.Button(root,text='Set',command=set1)
b2.pack()
root.mainloop()
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐