Tkinter 教程 - 下拉列表
Jinku Hu
2023年1月30日
Tkinter 下拉列表-combobox
是用户可用来选择的下拉列表。它是 Entry
和 drop-down
控件的组合。当你单击左侧的箭头时,你将看到一个显示所有选项的下拉菜单,如果单击其中的一个,它将替换当前的 Entry
内容。
Tkinter 下拉列表举例
import tkinter as tk
app = tk.Tk()
app.geometry("200x100")
labelTop = tk.Label(app, text="Choose your favourite month")
labelTop.grid(column=0, row=0)
comboExample = ttk.Combobox(app, values=["January", "February", "March", "April"])
pprint(dict(comboExample))
comboExample.grid(column=0, row=1)
comboExample.current(1)
print(comboExample.current(), comboExample.get())
app.mainloop()
from tkinter import ttk
Tkinter 下拉列表控件位于 Tkinter 的 ttk
模块中,因此,你需要导入此模块才能使用此控件。
comboExample = ttk.Combobox(app, values=["January", "February", "March", "April"])
它会创建了 Tkinter 下拉列表控件实例,并分配将显示在下拉列表中的值。
comboExample.current(1)
通常,下拉列表中显示的默认项是值列表中的第一个元素。你还可以使用 current(index)
方法将其更改为任何元素。
print(comboExample.current(), comboExample.get())
你还可以使用 current()
来获取当前所选元素的索引,并使用 get()
方法来获取元素本身。
Tkinter 下拉列表事件绑定
下拉列表回调函数绑定与前几章介绍的控件不同。bind()
方法是当用户在下拉列表中选择元素时将回调函数与下拉列表虚拟事件绑定的方法。
import tkinter as tk
def callbackFunc(event):
print("New Element Selected")
app = tk.Tk()
app.geometry("200x100")
labelTop = tk.Label(app, text="Choose your favourite month")
labelTop.grid(column=0, row=0)
comboExample = ttk.Combobox(app, values=["January", "February", "March", "April"])
comboExample.grid(column=0, row=1)
comboExample.current(1)
comboExample.bind("<<ComboboxSelected>>", callbackFunc)
app.mainloop()
def callbackFunc(event):
print("New Element Selected")
无论你何时从列表中选择元素,它都会调用该回调函数。
Note
event
作为传递参数不应该被跳过,它是从下拉框虚拟事件中传递过来的。comboExample.bind("<<ComboboxSelected>>", callbackFunc)
它将虚拟事件"« ComboboxSelected »“与回调函数绑定在一起。
每次从列表中选择一个新元素时,它都会打印出 New Element Selected
Tkinter Combobox 只读状态
上面的所有示例代码中的组合框元素的内容是可编辑的,因为 state
默认设置是 normal
,该状态下的文本字段是可以直接编辑的。
Tkinter 组合框 Combobox 的状态除了 normal
外还有下面两种状态,
readonly
-文本字段不可编辑,用户只能从下拉列表中选择值。disabled
-组合框显示为灰色,无法进行交互。
import tkinter as tk
from tkinter import ttk
app = tk.Tk()
app.geometry("200x100")
labelTop = tk.Label(app, text="Choose your favourite month")
labelTop.grid(column=0, row=0)
comboExample = ttk.Combobox(
app, values=["January", "February", "March", "April"], state="readonly"
)
comboExample.grid(column=0, row=1)
comboExample.current(0)
print(comboExample.current(), comboExample.get())
app.mainloop()
上面的示例将 Tkinter 组合框设置为只读。
如果将状态从 readonly
更改为 disabled
,则组合框显示为灰色,如下所示。