Tkinter Listbox

Resumo : neste tutorial, você aprenderá como usar o widget Tkinter Listbox para exibir uma lista de itens.

Introdução à caixa de listagem Tkinter

Um widget Listbox exibe uma lista de itens de texto de linha única. Uma caixa de listagem permite navegar pelos itens e selecionar um ou vários itens de uma vez.

Para criar um Listbox, você usa a tk.Listboxclasse assim:

listbox = tk.Listbox(container, listvariable, height)Linguagem de código:  Python  ( python )

Nesta sintaxe:

  • O containeré o componente pai da caixa de listagem.
  • Os listvariablelinks para um tkinter.Variableobjeto. Mais explicações sobre isso mais tarde.
  • É heighto número de itens que a caixa de listagem exibirá sem rolar.

Lista de itens

Para preencher itens em uma caixa de listagem, primeiro crie um Variableobjeto que é inicializado com uma lista de itens. E então você atribui esse Variableobjeto à listvariableopção da seguinte maneira:

list_items = tk.Variable(value=items)
listbox = tk.Listbox(
    container,
    height,
    listvariable=list_items
)Linguagem de código:  Python  ( python )

Para adicionar, remover ou reorganizar itens no Listbox, basta modificar a list_itemsvariável.

Modo de seleção

A selectmodeopção determina quantos você pode selecionar e como o arrastar do mouse afetará os itens:

  • tk.BROWSE– permite uma única seleção. Se você selecionar um item e arrastá-lo para uma linha diferente, a seleção seguirá o mouse. Este é o padrão.
  • tk.EXTENDED– selecione qualquer grupo adjacente de itens de uma vez clicando no primeiro item e arrastando até a última linha.
  • tk.SINGLE– permite selecionar uma linha e você não pode arrastar o mouse.
  • tk.MULTIPLE– selecione qualquer número de linhas de uma vez. Clicar em qualquer linha alterna se ela está selecionada ou não.

Vinculando o evento selecionado

Para executar uma função quando os itens selecionados mudam, você vincula essa função ao <<ListboxSelect>>evento:

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

Exemplo de widget de caixa de listagem Tkinter

O programa a seguir exibe uma caixa de listagem que contém uma lista de linguagens de programação. Ao selecionar um ou mais itens, o programa exibe os selecionados em uma caixa de mensagem:

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

# create the root window
root = tk.Tk()
root.title('Listbox')


# create a list box
langs = ('Java', 'C#', 'C', 'C++', 'Python',
         'Go', 'JavaScript', 'PHP', 'Swift')

var = tk.Variable(value=langs)

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    selectmode=tk.EXTENDED
)

listbox.pack(expand=True, fill=tk.BOTH)


def items_selected(event):
    # get all selected indices
    selected_indices = listbox.curselection()
    # get selected items
    selected_langs = ",".join([listbox.get(i) for i in selected_indices])
    msg = f'You selected: {selected_langs}'
    showinfo(title='Information', message=msg)


listbox.bind('<<ListboxSelect>>', items_selected)

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

Saída:

Como funciona.

Primeiro, crie um Variableque contenha uma lista de linguagens de programação:

langs = ('Java', 'C#', 'C', 'C++', 'Python',
        'Go', 'JavaScript', 'PHP', 'Swift')

var = tk.Variables(value=langs)Linguagem de código:  Python  ( python )

Segundo, crie um novo Listboxwidget e atribua o varobjeto ao listvariable:

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    selectmode=tk.EXTENDED
)Linguagem de código:  Python  ( python )

O heightmostra seis linguagens de programação sem rolagem. O selectmode=tk.EXTENDEDpermite múltiplas seleções.

Terceiro, defina uma função que será invocada quando um ou mais itens forem selecionados. A items_selected()função mostra uma lista dos itens da lista atualmente selecionados:

def items_selected(event):
    # get all selected indices
    selected_indices = listbox.curselection()

    # get selected items
    selected_langs = ",".join([listbox.get(i) for i in selected_indices])
    msg = f'You selected: {selected_langs}'
    showinfo(title='Information', message=msg)Linguagem de código:  Python  ( python )

Finalmente, vincule a items_selectedfunção ao '<<ListboxSelect>>'evento:

listbox.bind('<<ListboxSelect>>', items_selected)Linguagem de código:  Python  ( python )

Adicionando uma barra de rolagem ao Listbox

O programa a seguir ilustra como adicionar uma barra de rolagem a uma caixa de listagem:

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

# create the root window
root = tk.Tk()

root.title('Listbox')


# create a list box
langs = ('Java', 'C#', 'C', 'C++', 'Python',
         'Go', 'JavaScript', 'PHP', 'Swift')

var = tk.Variable(value=langs)

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    selectmode=tk.EXTENDED)

listbox.pack(expand=True, fill=tk.BOTH, side=tk.LEFT)

# link a scrollbar to a list
scrollbar = ttk.Scrollbar(
    root,
    orient=tk.VERTICAL,
    command=listbox.yview
)

listbox['yscrollcommand'] = scrollbar.set

scrollbar.pack(side=tk.LEFT, expand=True, fill=tk.Y)


def items_selected(event):
    # get selected indices
    selected_indices = listbox.curselection()
    # get selected items
    selected_langs = ",".join([listbox.get(i) for i in selected_indices])
    msg = f'You selected: {selected_langs}'

    showinfo(title='Information', message=msg)


listbox.bind('<<ListboxSelect>>', items_selected)

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

Saída:

Para obter mais informações sobre como vincular uma barra de rolagem a um widget rolável, confira o tutorial do widget de barra de rolagem .

Resumo

  • Use tk.Listbox(container, height, listvariable)para criar um widget Listbox; um listvariabledeveria ser um tk.StringVar(value=items).
  • Vincule uma função de retorno de chamada ao '<<ListboxSelect>>'evento para executar a função quando um ou mais itens da lista forem selecionados.

Deixe um comentário

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