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.Listbox
classe 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
listvariable
links para umtkinter.Variable
objeto. Mais explicações sobre isso mais tarde. - É
height
o 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 Variable
objeto que é inicializado com uma lista de itens. E então você atribui esse Variable
objeto à listvariable
opçã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_items
variável.
Modo de seleção
A selectmode
opçã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 Variable
que 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 Listbox
widget e atribua o var
objeto ao listvariable
:
listbox = tk.Listbox(
root,
listvariable=var,
height=6,
selectmode=tk.EXTENDED
)
Linguagem de código: Python ( python )
O height
mostra seis linguagens de programação sem rolagem. O selectmode=tk.EXTENDED
permite 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_selected
funçã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; umlistvariable
deveria ser umtk.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.