Виджет ttk.Combobox
в Tkinter предоставляет удобный способ создания выпадающих меню в ваших приложениях графического интерфейса пользователя на Python. Это руководство проведет вас через его ключевые особенности и функциональные возможности, предоставляя практические примеры, которые помогут вам эффективно интегрировать поля со списком в ваши проекты.
Оглавление:
- Базовый пример Combobox
- Настройка внешнего вида: шрифты и стили
- Обработка событий и взаимодействие с пользователем
- Динамическое обновление значений Combobox
- Создание полей со списком в режиме «только для чтения»
1. Базовый пример Combobox
Начнем с простого примера, иллюстрирующего создание и использование ttk.Combobox
:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Пример Combobox")
combo = ttk.Combobox(root, values=["Вариант 1", "Вариант 2", "Вариант 3"])
combo.pack(pady=20)
combo.current(0) # Установить значение по умолчанию "Вариант 1"
root.mainloop()
Этот код создает главное окно, добавляет поле со списком с тремя предопределенными вариантами и устанавливает значение по умолчанию «Вариант 1». Не забудьте импортировать как tkinter
, так и ttk
.
2. Настройка внешнего вида: шрифты и стили
Вы можете настроить внешний вид поля со списком, например, его шрифт:
import tkinter as tk
from tkinter import ttk
import tkinter.font as tkFont
root = tk.Tk()
root.title("Пример стилизации Combobox")
myFont = tkFont.Font(family="Helvetica", size=12, weight="bold")
combo = ttk.Combobox(root, values=["Вариант A", "Вариант B", "Вариант C"], font=myFont)
combo.pack(pady=20)
combo.current(0)
root.mainloop()
В этом примере показано, как создать пользовательский шрифт и применить его к полю со списком. Экспериментируйте с различными семействами шрифтов, размерами и весами, чтобы добиться желаемого результата.
3. Обработка событий и взаимодействие с пользователем
Чтобы реагировать на выбор пользователя, привяжите события к полю со списком. Событие <<ComboboxSelected>>
срабатывает, когда пользователь выбирает элемент:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Обработка событий Combobox")
def combo_selected(event):
selected_item = combo.get()
print(f"Выбранный элемент: {selected_item}")
combo = ttk.Combobox(root, values=["Вариант 1", "Вариант 2", "Вариант 3"])
combo.pack(pady=20)
combo.current(0)
combo.bind("<<ComboboxSelected>>", combo_selected)
root.mainloop()
Этот код определяет функцию combo_selected
, которая выводит выбранный элемент. Метод bind
связывает эту функцию с событием <<ComboboxSelected>>
.
4. Динамическое обновление значений Combobox
Вы можете динамически обновлять параметры поля со списком во время выполнения:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Динамический Combobox")
combo = ttk.Combobox(root)
combo.pack(pady=20)
def update_combo():
new_values = ["Новый вариант 1", "Новый вариант 2", "Новый вариант 3"]
combo["values"] = new_values
button = tk.Button(root, text="Обновить Combobox", command=update_combo)
button.pack()
root.mainloop()
Кнопка запускает функцию update_combo
, которая изменяет атрибут values
поля со списком.
5. Создание полей со списком в режиме «только для чтения»
Чтобы сделать поле со списком доступным только для чтения (запретить прямой ввод текста), используйте параметр state
:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Combobox только для чтения")
combo = ttk.Combobox(root, values=["Вариант 1", "Вариант 2", "Вариант 3"], state="readonly")
combo.pack(pady=20)
combo.current(0)
root.mainloop()
Установка state="readonly"
отключает прямой ввод текста, позволяя только выбирать из выпадающего списка.