Tkinter Tutorial - Combobox

Jinku Hu 30 janeiro 2023
  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 Tutorial - Combobox

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

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.

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

Autor: 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 Facebook