Tkinter 教程 - 下拉列表

Jinku Hu 2023年1月30日 2018年2月15日 Tkinter Tkinter Combobox
  1. Tkinter 下拉列表举例
  2. Tkinter 下拉列表事件绑定
  3. Tkinter Combobox 只读状态
Tkinter 教程 - 下拉列表

Tkinter 下拉列表-combobox 是用户可用来选择的下拉列表。它是 Entrydrop-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()

Tkinter Tutorial Combobox Basic

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,则组合框显示为灰色,如下所示。

Tkinter Combobox 状态禁止只读

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn