Python tkinter -- 第15章 Combobox
第15章 Combobox
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)。另外两种配置模式分别为居中排列(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.11 width
指定输入框的宽度,默认设置为20个单位。特别提示的是,请确保仅调整输入字段本身的宽度参数,并不要试图修改下拉按钮的相关属性。当计算整个下拉框控件所需的宽度时,请将这两个数值进行求和运算。
方法 15.2
| 方法 | 描述 |
|---|
current(newindex=None)
(1)根据指定的新索引newindex调用相关功能并将其结果作为当前显示内容更新到输入字段中。
(2)当有特定新索引newindex时,在当前显示的内容基础上搜索与之匹配的具体下拉列表选项,并将搜索结果作为当前显示内容更新到输入字段中;若未找到匹配结果则会隐式地排除所有选项。
set(value):设置当前显示的内容为指定的新值。
current 方法的功能:
(1)无参数情况:在当前显示的内容基础上搜索与之匹配的具体下拉列表选项并将其搜索结果作为当前显示内容更新到输入字段中;若未找到匹配结果则会隐式地排除所有选项。
(2)有特定新索引newindex时,在当前显示的内容基础上搜索与之匹配的具体下拉列表选项并将搜索结果作为当前显示内容更新到输人字段中;若未找到匹配结果则会隐式地排除所有选项。
set(value):设置当前显示的内容为指定的新值。
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参数并不局限于列表中提供的选项因此具有更大的灵活性和适用性
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()
