Tkinter Tutorial - Combobox

  1. Exemplo da Combobox Python Tkinter
  2. Tkinter Combobox Encadernação de Eventos
  3. Tkinter Combobox Dynamically Update Values
  4. Tkinter Combobox Apenas Leitura

Tkinter Combobox é a lista drop-down para o usuário escolher. É uma combinação de Entry e drop-down widgets como você pode ver. Quando você clicar na seta do lado esquerdo, você verá um menu suspenso mostrando todas as escolhas, e se você clicar em um, ele irá substituir o conteúdo atual do Entry.

Exemplo da Combobox 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 Tutorial Combobox Basic

from tkinter import ttk

O widget combobox Tkinter está no módulo ttk do Tkinter, portanto, você precisa importar este módulo para utilizar este widget.

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

Ele cria a instância do Tkinter combobox widget e também atribui os valores que aparecerão na lista suspensa.

comboExample.current(1)

Normalmente, o item padrão mostrado na combobox é o primeiro elemento da lista de valores. Você também pode alterá-lo para qualquer elemento utilizando o método current(index).

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

Você também poderia utilizar current() para obter o índice do elemento selecionado, e utilizar get() método para obter o próprio elemento.

Tkinter Combobox Encadernação de Eventos

A função de ligação de retorno da combobox é diferente dos widgets introduzidos nos últimos capítulos. O método bind() é a forma de ligar a função de retorno com o evento virtual da combobox quando o usuário seleciona um elemento na lista suspensa.

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

Esta é a função de callback definida quando o usuário seleciona um elemento da lista.

Nota

O event não deve ser ignorado como o argumento passageiro, ele é passado do evento virtual da combobox

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

Ele liga o evento virtual <<ComboboxSelected>> com a função de retorno de chamada.

Cada vez que você seleciona um novo elemento da lista, ele imprime New Element Selected.

Tkinter Combobox Dynamically Update Values

A lista de escolhas na combobox Tkinter poderia ser atualizada dinamicamente com a opção postcommand que executa a função dada antes de exibir a lista pop-down de escolhas.

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

A função changeMonth muda a lista de escolhas da combobox para

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

A combobox mostra-se vazia após o início da GUI e mostra os meses dados como acima após o usuário clicar na seta na combobox.

Tkinter Tutorial Combobox pós-comando

Tkinter Combobox Apenas Leitura

O conteúdo dos elementos nos exemplos da Combobox mostrados acima é editável porque o state padrão é normal, o que torna o campo de texto diretamente editável.

A Combobox Tkinter tem os outros dois estados além do normal,

  • Somente leitura - o campo de texto não é editável, e o usuário só poderia selecionar os valores da lista suspensa.
  • disabled - a Combobox está cinzenta e a interação é impossível.
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()

O exemplo acima define o Tkinter Combobox somente para leitura.

Se você mudar o estado de readonly para disabled, a Combobox fica cinzenta, como mostrado abaixo.

Estado da Combobox Tkinter Combobox Desabilitada