Учебник Tkinter - Combobox

  1. Пример комбинированной коробки Python Tkinter
  2. Комбинированные шрифты Tkinter
  3. Tkinter Combobox привязка к событию
  4. Tkinter Combobox Динамически обновлять значения
  5. Tkinter Комбобокс только для чтения

Tkinter Combobox - это выпадающий список для выбора пользователя. Он представляет собой комбинацию виджетов Entry и выпадающих виджетов drop-down, как вы видите. При нажатии на стрелку слева вы увидите выпадающее меню, показывающее все варианты, а при нажатии на один из них, оно заменит текущее содержимое Entry.

Пример комбинированной коробки Python Tkinter

Tkinter Combobox_Basic.py
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"])
pprint(dict(comboExample)) 
comboExample.grid(column=0, row=1)
comboExample.current(1)

print(comboExample.current(), comboExample.get())

app.mainloop()

Tkinter учебное пособие Комбобокс базовый

from tkinter import ttk

Виджет Tkinter Combobox находится в модуле Tkinter ttk, поэтому для использования этого виджета необходимо импортировать этот модуль.

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])

Он создает экземпляр виджета Tkinter combobox, а также присваивает значения, которые будут отображаться в выпадающем списке.

comboExample.current(1)

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

print(comboExample.current(), comboExample.get())

Вы также можете использовать current() для получения индекса текущего выбранного элемента, и использовать метод get() для получения самого элемента.

Комбинированные шрифты Tkinter

Он должен установить шрифты как для Combobox, так и для его списка, чтобы достичь цели, чтобы шрифты Combobox были правильно настроены.

import tkinter as tk
from tkinter import ttk
 
app = tk.Tk() 
app.geometry('300x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

fontExample = ("Courier", 16, "bold")
comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            font = fontExample)

app.option_add('*TCombobox*Listbox.font', fontExample)




comboExample.grid(column=0, row=1)

app.mainloop()

Учебное пособие Tkinter Tutorial Combobox Установить шрифты

fontExample = ("Courier", 16, "bold")
comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            font = fontExample)

Tkinterный шрифт может быть указан с кортежом с опциями шрифт-семейство, размер, вес (bold или normal), наклон (italic или roman) и т.д. Шрифт кортежа присваивается Комбоксу font = fontExample.

app.option_add('*TCombobox*Listbox.font', fontExample)

Нам также необходимо указать шрифт списка в Combobox, иначе текст в списке Combobox все равно будет использовать шрифт по умолчанию, но не тот, который был указан в Combobox.

Tkinter Combobox привязка к событию

Привязка функции обратного вызова combobox отличается от виджетов, представленных в последних главах. Метод bind() - это способ привязки функции обратного вызова к виртуальному событию combobox, когда пользователь выбирает элемент в выпадающем списке.

Tkinter Combobox_Virtual Event Binding.py
import tkinter as tk
from tkinter import ttk

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")

Это определенная функция обратного вызова всякий раз, когда вы выбираете элемент из списка.

Примечание

event не должно быть пропущено, как передающий аргумент, оно передается из выпадающего виртуального события.

comboExample.bind("<<ComboboxSelected>>", callbackFunc)

Она связывает виртуальное событие <<ComboboxSelected>> с функцией обратного вызова.

Каждый раз, когда Вы выбираете новый элемент из списка, он печатает New Element Selected.

Tkinter Combobox Динамически обновлять значения

Список вариантов в Tkinter combobox может динамически обновляться с помощью опции postcommand, которая выполняет данную функцию перед отображением выпадающего списка вариантов.

import tkinter as tk
from tkinter import ttk

def callbackFunc(event):
     print("New Element Selected")
     
app = tk.Tk() 
app.geometry('200x100')

def changeMonth():
    comboExample["values"] = ["July",
                              "August",
                              "September",
                              "October"
                                ]

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            postcommand=changeMonth)


comboExample.grid(column=0, row=1)

app.mainloop()

Функция changeMonth изменяет выпадающий список вариантов таким образом, чтобы он был

["July",
 "August",
 "September",
 "October"
]

Выпадающий список отображается пустым после запуска графического интерфейса и показывает указанные месяцы, как указано выше, после щелчка по стрелке в выпадающем списке.

Посткоманда в поле Tkinter Tutorial Combobox

Tkinter Комбобокс только для чтения

Содержимое элементов в примерах Комбобокса, показанных выше, является редактируемым, потому что по умолчанию state является normal, что делает текстовое поле непосредственно редактируемым.

В Tkinter Combobox кроме normal есть еще два состояния,

  • readonly - текстовое поле не редактируется, и пользователь может выбирать значения только из выпадающего списка.
  • normal - Комбобокс серый и взаимодействие невозможно.
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 Combobox только для чтения.

Если вы измените состояние с readonly на disabled, то Комбобокс закрасится серым цветом, как показано ниже.

Tkinter Combobox State Disabled

comments powered by Disqus