Como Selecionar e Gerenciar Itens de um ComboBox no Python

O Python é uma linguagem de programação que permite criar aplicativos GUI de forma fácil, e o ComboBox é um elemento de interface de usuário extremamente útil. Neste artigo, explicamos detalhadamente desde os métodos básicos de utilização do ComboBox até formas mais avançadas de uso no Python. Vamos seguir com exemplos de código específicos e explicações passo a passo, para garantir que até os iniciantes consigam entender.

Índice

O que é um ComboBox?

O ComboBox, também conhecido como lista suspensa, é um dos elementos GUI que oferece uma lista de opções para o usuário escolher. É uma combinação de um campo de entrada de texto e uma lista de seleção, permitindo que o usuário selecione uma opção ou insira um texto diretamente. Isso simplifica o processo de entrada para o usuário, evitando erros ao limitar as opções disponíveis. No Python, o ComboBox é implementado principalmente com a biblioteca tkinter.

Como Criar um ComboBox no Python

Para criar um ComboBox no Python, utilizamos principalmente a biblioteca tkinter. O tkinter é uma toolkit GUI que já vem incorporada no Python, permitindo criar facilmente janelas e widgets.

Importando o tkinter e Criando a Janela

Primeiro, importamos a biblioteca tkinter e criamos a janela.

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Exemplo de ComboBox")
root.geometry("300x200")

Criando e Posicionando o ComboBox

Em seguida, criamos o ComboBox utilizando o widget Combobox do módulo ttk e o posicionamos na janela.

# Criando o ComboBox
combo = ttk.Combobox(root, values=["Opção 1", "Opção 2", "Opção 3"])
combo.set("Selecione uma opção")  # Definindo o valor padrão
combo.pack(pady=20)  # Posicionando na janela

Iniciando o Loop Principal

Por fim, iniciamos o loop principal para exibir a janela.

# Iniciando o loop principal
root.mainloop()

Com esses passos, podemos criar um ComboBox básico usando tkinter no Python. Vamos agora examinar exemplos de aplicação mais detalhados.

Exemplo de Implementação de ComboBox com tkinter

Agora, vamos apresentar um exemplo de implementação do ComboBox com tkinter. Neste exemplo, criaremos uma aplicação simples onde o usuário pode selecionar uma opção.

Preparando a Implementação

Primeiro, importamos as bibliotecas necessárias e configuramos a janela básica.

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Exemplo de Implementação de ComboBox")
root.geometry("400x300")

Criando o ComboBox

Agora, criamos o ComboBox e o posicionamos na janela. Neste exemplo, fornecemos uma lista de linguagens de programação.

# Criando o ComboBox
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
combo = ttk.Combobox(root, values=languages)
combo.set("Selecione uma linguagem de programação")
combo.pack(pady=20)

Obtendo o Item Selecionado

Adicionamos agora uma função que será chamada sempre que o usuário modificar a seleção do ComboBox. A função exibe a linguagem selecionada em um label.

# Função chamada quando a seleção mudar
def on_select(event):
    selected_language = combo.get()
    label.config(text=f"Linguagem selecionada: {selected_language}")

# Vinculando o evento ao ComboBox
combo.bind("<<ComboboxSelected>>", on_select)

# Criando o label para mostrar a seleção
label = tk.Label(root, text="Linguagem selecionada: Nenhuma")
label.pack(pady=10)

Executando a Aplicação

Finalmente, iniciamos o loop principal para rodar a aplicação.

# Iniciando o loop principal
root.mainloop()

Código Completo

O código completo é o seguinte:

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Exemplo de Implementação de ComboBox")
root.geometry("400x300")

# Criando o ComboBox
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
combo = ttk.Combobox(root, values=languages)
combo.set("Selecione uma linguagem de programação")
combo.pack(pady=20)

# Função chamada quando a seleção mudar
def on_select(event):
    selected_language = combo.get()
    label.config(text=f"Linguagem selecionada: {selected_language}")

# Vinculando o evento ao ComboBox
combo.bind("<<ComboboxSelected>>", on_select)

# Criando o label para mostrar a seleção
label = tk.Label(root, text="Linguagem selecionada: Nenhuma")
label.pack(pady=10)

# Iniciando o loop principal
root.mainloop()

Ao executar este código, você verá um ComboBox onde o usuário pode selecionar uma linguagem de programação e a seleção será exibida em um label.

Processamento de Eventos em um ComboBox

Para executar ações específicas quando a seleção de um ComboBox for alterada, é necessário implementar o processamento de eventos. No tkinter, podemos capturar eventos de mudança de seleção e realizar as ações desejadas.

Vinculando Eventos Básicos

Para tratar eventos de mudança de seleção, usamos o evento <<ComboboxSelected>>. Abaixo está um exemplo básico de vinculação de evento.

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Processamento de Eventos de ComboBox")
root.geometry("400x300")

# Criando o ComboBox
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
combo = ttk.Combobox(root, values=languages)
combo.set("Selecione uma linguagem de programação")
combo.pack(pady=20)

# Função chamada quando a seleção mudar
def on_select(event):
    selected_language = combo.get()
    label.config(text=f"Linguagem selecionada: {selected_language}")

# Vinculando o evento ao ComboBox
combo.bind("<<ComboboxSelected>>", on_select)

# Criando o label para mostrar a seleção
label = tk.Label(root, text="Linguagem selecionada: Nenhuma")
label.pack(pady=10)

# Iniciando o loop principal
root.mainloop()

Detalhes do Processamento de Eventos

Na função de manipulador de eventos on_select, usamos combo.get() para obter o valor selecionado e exibi-lo no label. Dessa forma, podemos alterar dinamicamente o processamento de acordo com a escolha do usuário.

Exemplo de Processamento Diferenciado

Por exemplo, podemos mostrar uma mensagem diferente dependendo da linguagem selecionada.

def on_select(event):
    selected_language = combo.get()
    if selected_language == "Python":
        message = "Python é uma linguagem de programação geral."
    elif selected_language == "Java":
        message = "Java é uma linguagem amplamente usada em empresas."
    else:
        message = f"Linguagem selecionada: {selected_language}"
    label.config(text=message)

Chamando Funções com a Mudança de Seleção

Você também pode chamar funções específicas para realizar tarefas complexas com base na seleção do ComboBox.

# Exemplo: Obtendo dados de um banco de dados
def fetch_data(selected_language):
    # Obtendo dados de um banco de dados fictício
    data = {
        "Python": "Python é uma linguagem de programação open source.",
        "Java": "Java é uma linguagem independente de plataforma.",
        "C++": "C++ é ideal para aplicações de alto desempenho.",
        "JavaScript": "JavaScript é essencial para o desenvolvimento web.",
        "Ruby": "Ruby é uma linguagem para escrever código conciso e legível."
    }
    return data.get(selected_language, "Informações não encontradas.")

def on_select(event):
    selected_language = combo.get()
    message = fetch_data(selected_language)
    label.config(text=message)

Usando o processamento de eventos do ComboBox, podemos criar aplicativos dinâmicos baseados na seleção do usuário. Vamos agora discutir como adicionar e remover itens dinamicamente do ComboBox.

Adicionando e Removendo Itens Dinamicamente

Podemos criar interfaces que se adaptam dinamicamente ao comportamento do usuário, adicionando ou removendo itens do ComboBox conforme necessário. Aqui explicamos como fazer isso.

Adicionando Itens

Veja um exemplo de como adicionar um novo item ao ComboBox com base na entrada do usuário.

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Adicionando e Removendo Itens no ComboBox")
root.geometry("400x300")

# Criando o ComboBox
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
combo = ttk.Combobox(root, values=languages)
combo.set("Selecione uma linguagem de programação")
combo.pack(pady=20)

# Função para adicionar um novo item
def add_item():
    new_item = entry.get()
    if new_item and new_item not in combo['values']:
        combo['values'] = (*combo['values'], new_item)
        entry.delete(0, tk.END)

# Criando o campo de entrada e botão de adicionar
entry = tk.Entry(root)
entry.pack(pady=5)
add_button = tk.Button(root, text="Adicionar", command=add_item)
add_button.pack(pady=5)

# Iniciando o loop principal
root.mainloop()

Neste exemplo, obtemos o valor digitado em um campo de entrada e o adicionamos ao ComboBox quando o botão “Adicionar” é pressionado.

Removendo Itens

A seguir, mostramos como remover o item selecionado do ComboBox.

# Função para remover o item selecionado
def delete_item():
    selected_item = combo.get()
    current_values = list(combo['values'])
    if selected_item in current_values:
        current_values.remove(selected_item)
        combo['values'] = current_values
        combo.set("Selecione uma linguagem de programação")

# Criando o botão de deletar
delete_button = tk.Button(root, text="Remover", command=delete_item)
delete_button.pack(pady=5)

Com este código, podemos remover o item selecionado do ComboBox ao clicar no botão “Remover”.

Código Completo

Abaixo, mostramos o código completo que combina a adição e remoção dinâmica de itens no ComboBox.

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Adicionando e Removendo Itens no ComboBox")
root.geometry("400x300")

# Criando o ComboBox
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
combo = ttk.Combobox(root, values=languages)
combo.set("Selecione uma linguagem de programação")
combo.pack(pady=20)

# Função para adicionar um novo item
def add_item():
    new_item = entry.get()
    if new_item and new_item not in combo['values']:
        combo['values'] = (*combo['values'], new_item)
        entry.delete(0, tk.END)

# Função para remover o item selecionado
def delete_item():
    selected_item = combo.get()
    current_values = list(combo['values'])
    if selected_item in current_values:
        current_values.remove(selected_item)
        combo['values'] = current_values
        combo.set("Selecione uma linguagem de programação")

# Criando o campo de entrada e botão de adicionar
entry = tk.Entry(root)
entry.pack(pady=5)
add_button = tk.Button(root, text="Adicionar", command=add_item)
add_button.pack(pady=5)

# Criando o botão de deletar
delete_button = tk.Button(root, text="Remover", command=delete_item)
delete_button.pack(pady=5)

# Iniciando o loop principal
root.mainloop()

Este aplicativo permite que o usuário adicione novos itens ou remova itens existentes do ComboBox. Vamos agora explorar como estilizar e personalizar o ComboBox.

Estilizando e Personalizando o ComboBox

Com o tkinter, é possível customizar a aparência do ComboBox para torná-lo mais atraente e adequado ao design do seu aplicativo.

Usando Estilos ttk

A biblioteca tkinter oferece a classe ttk.Style, que pode ser usada para personalizar o estilo do ComboBox. Vamos ver um exemplo de como mudar o visual do ComboBox.

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Personalizando o ComboBox")
root.geometry("400x300")

# Criando o estilo
style = ttk.Style()

# Personalizando o ComboBox
style.configure("TCombobox",
                background="white",
                foreground="black",
                fieldbackground="lightblue",
                font=("Arial", 12),
                bordercolor="blue")

# Criando o ComboBox com estilo personalizado
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
combo = ttk.Combobox(root, values=languages, style="TCombobox")
combo.set("Selecione uma linguagem de programação")
combo.pack(pady=20)

# Iniciando o loop principal
root.mainloop()

Este código utiliza a classe ttk.Style para configurar o estilo do ComboBox, permitindo alterar cores, fontes e outros aspectos visuais.

Personalizando Propriedades do Widget

Além de usar estilos, também podemos personalizar as propriedades diretamente no widget, como tamanho de fonte e padding.

# Criando o ComboBox e configurando propriedades diretamente
combo = ttk.Combobox(root, values=languages)
combo.set("Selecione uma linguagem de programação")
combo.pack(pady=20)

# Configurando o estilo do ComboBox
combo.config(font=("Helvetica", 14))

# Configurando o padding do ComboBox
combo.pack(padx=10, pady=10)

Alterando a Largura e Altura do ComboBox

Também podemos alterar a largura e altura da lista suspensa do ComboBox.

# Configurando a largura e altura do ComboBox
combo.config(width=30, height=10)

Configurando o Estado do ComboBox

Podemos configurar o ComboBox para ser somente leitura, permitindo que o usuário selecione apenas uma opção da lista sem digitar diretamente.

combo.config(state="readonly")

Código Completo com Personalização

Veja o código completo com a personalização do ComboBox, incluindo alterações no estilo e nas propriedades.

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Personalizando o ComboBox")
root.geometry("400x300")

# Criando o estilo
style = ttk.Style()
style.configure("TCombobox",
                background="white",
                foreground="black",
                fieldbackground="lightblue",
                font=("Arial", 12),
                bordercolor="blue")

# Criando o ComboBox com estilo personalizado
languages = ["Python", "Java", "C++", "JavaScript", "Ruby"]
combo = ttk.Combobox(root, values=languages, style="TCombobox")
combo.set("Selecione uma linguagem de programação")
combo.pack(pady=20)

# Configurando o ComboBox
combo.config(font=("Helvetica", 14), width=30, state="readonly")

# Iniciando o loop principal
root.mainloop()

Este código oferece um ComboBox com uma aparência customizada e configurado como somente leitura. Agora, vamos para o próximo exemplo de como usar o ComboBox em um formulário.

Exemplo de Uso do ComboBox em um Formulário

O ComboBox é extremamente útil em formulários, permitindo que os usuários selecionem facilmente opções. Vamos ver um exemplo de como usar o ComboBox em um formulário de registro de usuário.

Criando um Formulário de Registro de Usuário Simples

Neste exemplo, vamos adicionar ComboBoxes para selecionar o sexo e o país do usuário no formulário de registro.

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Formulário de Registro de Usuário")
root.geometry("400x400")

# Criando o campo de nome
tk.Label(root, text="Nome:").pack(pady=5)
name_entry = tk.Entry(root)
name_entry.pack(pady=5)

# Criando o campo de email
tk.Label(root, text="E-mail:").pack(pady=5)
email_entry = tk.Entry(root)
email_entry.pack(pady=5)

# Criando o ComboBox para selecionar o sexo
tk.Label(root, text="Sexo:").pack(pady=5)
gender_combo = ttk.Combobox(root, values=["Masculino", "Feminino", "Outro"])
gender_combo.set("Selecione")
gender_combo.pack(pady=5)

# Criando o ComboBox para selecionar o país
tk.Label(root, text="País:").pack(pady=5)
country_combo = ttk.Combobox(root, values=["Brasil", "EUA", "Reino Unido", "Canadá", "Austrália"])
country_combo.set("Selecione")
country_combo.pack(pady=5)

# Função de registro
def register():
    name = name_entry.get()
    email = email_entry.get()
    gender = gender_combo.get()
    country = country_combo.get()
    print(f"Nome: {name}\nE-mail: {email}\nSexo: {gender}\nPaís: {country}")

tk.Button(root, text="Registrar", command=register).pack(pady=20)

# Iniciando o loop principal
root.mainloop()

Este código cria um formulário simples de registro de usuário com campos de texto e ComboBoxes para selecionar o sexo e o país do usuário. A função de registro captura os dados inseridos e os exibe no console.

Processamento de Entrada do Usuário e Exibição

Esse código permite que o usuário insira ou selecione informações. A função register captura os dados inseridos e exibe no console. O ComboBox é útil para simplificar a entrada de dados e evitar erros.

Exemplo de Alteração Dinâmica de ComboBox com Base na Seleção

Aqui mostramos como alterar dinamicamente o conteúdo de um ComboBox com base na seleção de outro ComboBox. Por exemplo, vamos mudar as opções de cidade com base no país selecionado.

# ComboBox para selecionar a cidade
tk.Label(root, text="Cidade:").pack(pady=5)
city_combo = ttk.Combobox(root)
city_combo.set("Selecione")
city_combo.pack(pady=5)

# Função para atualizar as cidades com base no país
def update_cities(event):
    country = country_combo.get()
    if country == "Brasil":
        city_combo['values'] = ["São Paulo", "Rio de Janeiro", "Belo Horizonte"]
    elif country == "EUA":
        city_combo['values'] = ["Nova York", "Los Angeles", "Chicago"]
    elif country == "Reino Unido":
        city_combo['values'] = ["Londres", "Manchester", "Birmingham"]
    elif country == "Canadá":
        city_combo['values'] = ["Toronto", "Vancouver", "Montreal"]
    elif country == "Austrália":
        city_combo['values'] = ["Sydney", "Melbourne", "Brisbane"]
    else:
        city_combo['values'] = []

# Vinculando o evento de seleção do país ao ComboBox de cidade
country_combo.bind("<<ComboboxSelected>>", update_cities)

Este código altera as opções de cidade no ComboBox dependendo do país selecionado pelo usuário. Isso é útil para formular funcionalidades que dependem de escolhas anteriores.

Código Completo com Alteração Dinâmica

Aqui está o código completo que integra a mudança dinâmica de opções de ComboBox, permitindo ao usuário selecionar o país e, com base na seleção, escolher a cidade correspondente.

import tkinter as tk
from tkinter import ttk

# Criando a janela principal
root = tk.Tk()
root.title("Formulário de Registro de Usuário")
root.geometry("400x400")

# Criando os campos de nome e e-mail
tk.Label(root, text="Nome:").pack(pady=5)
name_entry = tk.Entry(root)
name_entry.pack(pady=5)

tk.Label(root, text="E-mail:").pack(pady=5)
email_entry = tk.Entry(root)
email_entry.pack(pady=5)

# Criando o ComboBox para sexo
tk.Label(root, text="Sexo:").pack(pady=5)
gender_combo = ttk.Combobox(root, values=["Masculino", "Feminino", "Outro"])
gender_combo.set("Selecione")
gender_combo.pack(pady=5)

# Criando o ComboBox para país
tk.Label(root, text="País:").pack(pady=5)
country_combo = ttk.Combobox(root, values=["Brasil", "EUA", "Reino Unido", "Canadá", "Austrália"])
country_combo.set("Selecione")
country_combo.pack(pady=5)

# Criando o ComboBox para cidade
tk.Label(root, text="Cidade:").pack(pady=5)
city_combo = ttk.Combobox(root)
city_combo.set("Selecione")
city_combo.pack(pady=5)

# Função para atualizar cidades com base no país
def update_cities(event):
    country = country_combo.get()
    if country == "Brasil":
        city_combo['values'] = ["São Paulo", "Rio de Janeiro", "Belo Horizonte"]
    elif country == "EUA":
        city_combo['values'] = ["Nova York", "Los Angeles", "Chicago"]
    elif country == "Reino Unido":
        city_combo['values'] = ["Londres", "Manchester", "Birmingham"]
    elif country == "Canadá":
        city_combo['values'] = ["Toronto", "

Vancouver", "Montreal"]
    elif country == "Austrália":
        city_combo['values'] = ["Sydney", "Melbourne", "Brisbane"]
    else:
        city_combo['values'] = []

# Vinculando o evento de país ao ComboBox de cidade
country_combo.bind("<<ComboboxSelected>>", update_cities)

# Função de registro
def register():
    name = name_entry.get()
    email = email_entry.get()
    gender = gender_combo.get()
    country = country_combo.get()
    city = city_combo.get()
    print(f"Nome: {name}\nE-mail: {email}\nSexo: {gender}\nPaís: {country}\nCidade: {city}")

tk.Button(root, text="Registrar", command=register).pack(pady=20)

# Iniciando o loop principal
root.mainloop()

Este código oferece um exemplo completo de como alterar dinamicamente o conteúdo de um ComboBox dependendo da seleção de outro. Com isso, podemos criar interfaces de usuário interativas e dinâmicas.

Tratamento de Erros e Depuração

Vamos agora discutir como tratar erros que podem ocorrer ao usar ComboBoxes e como realizar a depuração de maneira eficaz.

Erros Comuns e Como Corrigi-los

Alguns erros comuns ao usar ComboBoxes incluem seleções inválidas, erros ao obter valores e erros na vinculação de eventos. A seguir estão algumas soluções para cada tipo de erro.

Erro de Seleção Inválida

Este erro ocorre quando o usuário seleciona ou digita um valor inválido. Para evitar isso, podemos verificar se a seleção está na lista de opções.

def validate_selection():
    selected_value = combo.get()
    if selected_value not in combo['values']:
        error_label.config(text="Seleção inválida. Por favor, escolha uma opção válida.")
    else:
        error_label.config(text="")

Exibindo Mensagem de Erro

error_label = tk.Label(root, text="", fg="red")
error_label.pack(pady=5)

Adicionando Validação ao Botão de Registro

def register():
    validate_selection()
    if error_label.cget("text") == "":
        name = name_entry.get()
        email = email_entry.get()
        gender = gender_combo.get()
        country = country_combo.get()
        city = city_combo.get()
        print(f"Nome: {name}\nE-mail: {email}\nSexo: {gender}\nPaís: {country}\nCidade: {city}")

tk.Button(root, text="Registrar", command=register).pack(pady=20)

Erro ao Obter Valores

Esse erro ocorre quando tentamos obter um valor de um ComboBox que não foi selecionado ou que está vazio. Podemos evitar isso verificando a presença do valor antes de usá-lo.

def on_select(event):
    selected_value = combo.get()
    if selected_value:
        label.config(text=f"Linguagem selecionada: {selected_value}")
    else:
        label.config(text="Por favor, selecione uma opção.")

Erro ao Vincular Evento

Esse erro ocorre quando o evento não é vinculado corretamente ao ComboBox. Abaixo mostramos como garantir que o evento seja vinculado corretamente.

# Vinculando o evento corretamente
combo.bind("<<ComboboxSelected>>", on_select)

Dicas de Depuração

Depuração é uma etapa essencial para identificar e corrigir erros no código. Aqui estão algumas dicas para facilitar o processo de depuração.

Adicionando Logs

Adicionar logs ao programa pode ajudar a identificar o progresso do código e os valores das variáveis, tornando mais fácil encontrar a causa dos erros.

import logging

# Configurando o log
logging.basicConfig(level=logging.DEBUG)

def on_select(event):
    selected_value = combo.get()
    logging.debug(f"Valor selecionado: {selected_value}")
    label.config(text=f"Linguagem selecionada: {selected_value}")

combo.bind("<<ComboboxSelected>>", on_select)

Adicionando Tratamento de Exceções

Adicionar tratamento de exceções ajuda a lidar com erros inesperados e garante que o programa continue funcionando sem falhas.

def register():
    try:
        validate_selection()
        if error_label.cget("text") == "":
            name = name_entry.get()
            email = email_entry.get()
            gender = gender_combo.get()
            country = country_combo.get()
            city = city_combo.get()
            print(f"Nome: {name}\nE-mail: {email}\nSexo: {gender}\nPaís: {country}\nCidade: {city}")
    except Exception as e:
        logging.error(f"Erro ocorrido: {e}")

Código Completo com Depuração e Tratamento de Erros

Aqui está o código completo com tratamento de exceções e logs para depuração, o que torna o aplicativo mais robusto e fácil de depurar.

import tkinter as tk
from tkinter import ttk
import logging

# Criando a janela principal
root = tk.Tk()
root.title("Formulário de Registro de Usuário")
root.geometry("400x400")

# Configurando o log
logging.basicConfig(level=logging.DEBUG)

# Criando os campos de nome e e-mail
tk.Label(root, text="Nome:").pack(pady=5)
name_entry = tk.Entry(root)
name_entry.pack(pady=5)

tk.Label(root, text="E-mail:").pack(pady=5)
email_entry = tk.Entry(root)
email_entry.pack(pady=5)

# Criando o ComboBox para sexo
tk.Label(root, text="Sexo:").pack(pady=5)
gender_combo = ttk.Combobox(root, values=["Masculino", "Feminino", "Outro"])
gender_combo.set("Selecione")
gender_combo.pack(pady=5)

# Criando o ComboBox para país
tk.Label(root, text="País:").pack(pady=5)
country_combo = ttk.Combobox(root, values=["Brasil", "EUA", "Reino Unido", "Canadá", "Austrália"])
country_combo.set("Selecione")
country_combo.pack(pady=5)

# Criando o ComboBox para cidade
tk.Label(root, text="Cidade:").pack(pady=5)
city_combo = ttk.Combobox(root)
city_combo.set("Selecione")
city_combo.pack(pady=5)

# Função para atualizar cidades com base no país
def update_cities(event):
    country = country_combo.get()
    if country == "Brasil":
        city_combo['values'] = ["São Paulo", "Rio de Janeiro", "Belo Horizonte"]
    elif country == "EUA":
        city_combo['values'] = ["Nova York", "Los Angeles", "Chicago"]
    elif country == "Reino Unido":
        city_combo['values'] = ["Londres", "Manchester", "Birmingham"]
    elif country == "Canadá":
        city_combo['values'] = ["Toronto", "Vancouver", "Montreal"]
    elif country == "Austrália":
        city_combo['values'] = ["Sydney", "Melbourne", "Brisbane"]
    else:
        city_combo['values'] = []

# Vinculando o evento de país ao ComboBox de cidade
country_combo.bind("<<ComboboxSelected>>", update_cities)

# Função de registro
def register():
    try:
        validate_selection()
        if error_label.cget("text") == "":
            name = name_entry.get()
            email = email_entry.get()
            gender = gender_combo.get()
            country = country_combo.get()
            city = city_combo.get()
            print(f"Nome: {name}\nE-mail: {email}\nSexo: {gender}\nPaís: {country}\nCidade: {city}")
    except Exception as e:
        logging.error(f"Erro ocorrido: {e}")

# Exibindo mensagens de erro
error_label = tk.Label(root, text="", fg="red")
error_label.pack(pady=5)

# Adicionando e removendo itens do ComboBox
entry = tk.Entry(root)
entry.pack(pady=5)

# Iniciando o loop principal
root.mainloop()

Este código final integra tratamento de exceções, logs para depuração, e todas as funcionalidades discutidas até aqui. Isso torna a aplicação mais robusta e fácil de manter.

Conclusão

Neste artigo, exploramos como usar o ComboBox no Python para gerenciar opções de seleção. Começamos com exemplos simples de criação de ComboBoxes, avançando para tratamento de eventos, alteração dinâmica de itens, e até mesmo a personalização e estilização do ComboBox. Com essas informações, você pode criar aplicativos GUI mais interativos e eficientes. O ComboBox é uma ferramenta poderosa para gerenciar a entrada do usuário, e pode ser aplicada em uma variedade de cenários. Experimente usar essas técnicas nos seus próprios projetos!

Índice