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

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
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