Combobox

Последнее обновление: 15.09.2022

Виджет Combobox представляет выпадающий список, из которого пользователь может выбрать один элемент. Фактически он представляет комбинацию виджетов Entry и Listbox.

Основные параметры конструктора Combobox:

  • values: список строк для отображения в Combobox

  • background: фоновый цвет

  • cursor: курсор указателя мыши при наведении на текстовое поле

  • foreground: цвет текста

  • font: шрифт текста

  • justify: устанавливает выравнивание текста. Значение LEFT выравнивает текст по левому краю, CENTER - по центру, RIGHT - по правому краю

  • show: задает маску для вводимых символов

  • state: состояние элемента, может принимать значения NORMAL (по умолчанию) и DISABLED

  • textvariable: устанавливает привязку к элементу StringVar

  • height: высота элемента

  • width: ширина элемента

Определим простейший выпадающий список:

from tkinter import * 
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

languages = ["Python", "C#", "Java", "JavaScript"]
combobox = ttk.Combobox(values=languages)
combobox.pack(anchor=NW, padx=6, pady=6)

root.mainloop()

Здесь для элемента combobox в качестве источника значений устанавливается список languages:

Combobox в Tkinter и Python

С помощью параметра textvariable мы можем установить привязку к выбранному в Combobox значению:

from cProfile import label
from cgitb import text
from tkinter import * 
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

languages = ["Python", "C#", "Java", "JavaScript"]
# по умолчанию будет выбран первый элемент из languages
languages_var = StringVar(value=languages[0])   

label = ttk.Label(textvariable=languages_var)
label.pack(anchor=NW, padx=6, pady=6)

combobox = ttk.Combobox(textvariable=languages_var, values=languages)
combobox.pack(anchor=NW, padx=6, pady=6)

print(combobox.get())
root.mainloop()

Здесь выбранный в Combobox элемент привязан к переменной languages_var. По умолчанию выбран первый элемент списка languages. Для отслеживания изменения выбора определена метка Label, которая отображает выбранный элемент:

Получение выбранного элемента в Combobox в Tkinter и Python

По умолчанию мы можем ввести в текстовое поле в Combobox любое значение, даже то, которого нет в списке. Такое поведение не всегда может быть удобно. В этом случае мы можем установить для виджета состояние только для чтения, передав параметру "state" значение "readonly":

combobox = ttk.Combobox(textvariable=languages_var, values=languages, state="readonly")

Выбранный элемент можно получить с помощью метода get() класса Combobox

selection = combobox.get()

либо с помощью метода get() привязанной переменной

selection = languages_var.get()

Для установки нового значения можно использовать метод set():

languages_var.set(new_value)
combobox.set(new_value)

Для установки по индексу из привязанного набора значений также можно использовать метод current(newindex), где с помощью параметра newindex задается индекс выбранного значения. Например, выберем второй элемент:

combobox.current(1)

Отслеживание выбора значения

Для обработки выбора элементов в Combobox необходимо прикрепить функцию обработки к событию <<ComboboxSelect>> с помощью метода bind:

combobox.bind("<<ComboboxSelected>>", функция_обработки)

Например, динамически обработаем выбор в Combobox:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")

def selected(event):
    # получаем выделенный элемент
    selection = combobox.get()
    print(selection)
    label["text"] = f"вы выбрали: {selection}"

languages = ["Python", "C#", "Java", "JavaScript"]
label = ttk.Label()
label.pack(anchor=NW, fill=X, padx=5, pady=5)

combobox = ttk.Combobox(values=languages, state="readonly")
combobox.pack(anchor=NW, fill=X, padx=5, pady=5)
combobox.bind("<<ComboboxSelected>>", selected)

root.mainloop()

В данном случае при изменении выбора в списке срабатывает функция selected. Функция должна принимать один параметр, который несет информацию о событии - здесь это параметр event. Хотя в данном случае он никак не используется.

В самой функции получаем выбранный элемент и выводит соответствующую информацию на метку Label.

Обработка выбора элементов в Combobox в Tkinter и Python
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850