Caixa de combinação Tkinter

Resumo : neste tutorial, você aprenderá a criar um widget de caixa de combinação Tkinter que permite aos usuários selecionar um valor de um conjunto de valores.

Introdução ao widget Tkinter Combobox

Uma caixa de combinação é uma combinação de um widget de entrada e um widget de caixa de listagem . Um widget de caixa de combinação permite selecionar um valor em um conjunto de valores. Além disso, permite inserir um valor personalizado.

Crie uma caixa de combinação

Para criar um widget de caixa de combinação, você usará o ttk.Combobox()construtor. O exemplo a seguir cria um widget de caixa de combinação e o vincula a uma variável de string :

current_var = tk.StringVar()
combobox = ttk.Combobox(container, textvariable=current_var)Linguagem de código:  Python  ( python )

Esta containeré a janela ou moldura na qual você deseja colocar o widget da caixa de combinação.

O textvariableargumento vincula uma variável current_varao valor atual da caixa de combinação.

Para obter o valor atualmente selecionado, você pode usar a variável current_var:

current_value = current_var.get()Linguagem de código:  Python  ( python )

Alternativamente, você pode usar o get()método do objeto combobox:

current_value = combobox.get()Linguagem de código:  Python  ( python )

Para definir o valor atual, você usa a variável current_var ou o set()método do objeto combobox:

current_value.set(new_value)
combobox.set(new_value)Linguagem de código:  Python  ( python )

Definir lista de valores

A combobox tem a valuespropriedade de poder atribuir uma lista de valores a ela assim:

combobox['values'] = ('value1', 'value2', 'value3')Linguagem de código:  Python  ( python )

Por padrão, você pode inserir um valor personalizado na caixa de combinação. Se você não quiser isso, você pode definir a stateopção para 'readonly':

combobox['state'] = 'readonly'Linguagem de código:  Python  ( python )

Para reativar a edição da caixa de combinação, você usa o 'normal'estado assim:

combobox['state'] = 'normal'Linguagem de código:  Python  ( python )

Vincular eventos

Quando um valor selecionado muda, o widget de caixa de combinação gera um '<<ComboboxSelected>>'evento virtual. Para lidar com o evento, você pode usar o método bind() assim:

combobox.bind('<<ComboboxSelected>>', callback)Linguagem de código:  Python  ( python )

Neste exemplo, a função de retorno de chamada será executada quando o valor selecionado da caixa de combinação for alterado.

Defina o valor atual

Para definir o valor atual, você usa o set()método:

combobox.set(self, value)Linguagem de código:  Python  ( python )

Além disso, você pode usar o current()método:

current(self, newindex=None)Linguagem de código:  Python  ( python )

Especifica newindexo índice de valores da lista que você deseja selecionar como o valor atual.

Se você não especificar newindex, o current()método retornará o índice do valor atual na lista de valores ou -1se o valor atual não aparecer na lista.

Exemplo de caixa de combinação Python Tkinter

O programa a seguir ilustra como criar um widget de caixa de combinação:

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
from calendar import month_name

root = tk.Tk()

# config the root window
root.geometry('300x200')
root.resizable(False, False)
root.title('Combobox Widget')

# label
label = ttk.Label(text="Please select a month:")
label.pack(fill=tk.X, padx=5, pady=5)

# create a combobox
selected_month = tk.StringVar()
month_cb = ttk.Combobox(root, textvariable=selected_month)

# get first 3 letters of every month name
month_cb['values'] = [month_name[m][0:3] for m in range(1, 13)]

# prevent typing a value
month_cb['state'] = 'readonly'

# place the widget
month_cb.pack(fill=tk.X, padx=5, pady=5)


# bind the selected value changes
def month_changed(event):
    """ handle the month changed event """
    showinfo(
        title='Result',
        message=f'You selected {selected_month.get()}!'
    )

month_cb.bind('<<ComboboxSelected>>', month_changed)

root.mainloop()Linguagem de código:  Python  ( python )

Saída:

O programa a seguir mostra o widget de caixa de combinação do mesmo mês e usa o método set() para definir o valor atual para o mês atual:

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
from calendar import month_name
from datetime import datetime

root = tk.Tk()

# config the root window
root.geometry('300x200')
root.resizable(False, False)
root.title('Combobox Widget')

# label
label = ttk.Label(text="Please select a month:")
label.pack(fill=tk.X, padx=5, pady=5)

# create a combobox
selected_month = tk.StringVar()
month_cb = ttk.Combobox(root, textvariable=selected_month)

# get first 3 letters of every month name
month_cb['values'] = [month_name[m][0:3] for m in range(1, 13)]

# prevent typing a value
month_cb['state'] = 'readonly'

# place the widget
month_cb.pack(fill=tk.X, padx=5, pady=5)


# bind the selected value changes
def month_changed(event):
    """ handle the month changed event """
    showinfo(
        title='Result',
        message=f'You selected {selected_month.get()}!'
    )


month_cb.bind('<<ComboboxSelected>>', month_changed)

# set the current month
current_month = datetime.now().strftime('%b')
month_cb.set(current_month)

root.mainloop()Linguagem de código:  Python  ( python )

Resumo

  • Use ttk.Combobox(root, textvariable)para criar uma caixa de combinação.
  • Configure a statepropriedade como readonlypara evitar que os usuários insiram valores customizados.
  • Um widget de caixa de combinação emite o '<<ComboboxSelected>>'evento quando o valor selecionado muda.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *