Em computação, um tree view (literalmente do inglês vista de árvore) é um elemento de interface gráfica (isto é um componente widget) que permite ao usuário mostrar dados hierárquicos em forma de árvore, expandir ou recolher os ramos e nós. Dependendo do wiget toolkit ou aplicação em uso, existem muitos estilos de apresentação gráfica de tree views.
TreeView
O Widget ttk.Treeview exibe uma coleção hierárquica de itens. Cada item tem um rótulo de texto, uma imagem opcional, e uma lista opcional de valores de dados. Os valores dados são exibidas em colunas sucessivas após o rótulo árvore.
Exemplo:
Neste exemplo usamos uma visão de arvore para exibir uma discografia musical, você pode abrir e fechar os nós do modelo de dados em visão de árvore, um duplo clique do mouse em cada nó dispara um evento para que exibe a descrição do nó corrente em um rodapé.
Python
#!/usr/bin/env python # -*- coding: latin-1 -*- # Desenvolvimento Aberto # Treeview.py # importa modulo from Tkinter import * from ttk import * # Cria formulario formulario = Tk() formulario.title = "Desenvolvimento Aberto" # declara variaveis e arrays albumB = "Please, Please Me"; MusicaB = [ "I Saw Her Standing There", "Misery", "Anna (Go to Him)", "Chains" , "Boys" , "Ask Me Why", "Please Please Me", "Love Me Do" , "P.S. I Love You", "Baby It's You", "Do You Want To Know A Secret?", "A Taste of Honey", "There's A Place", "Twist and Shout" ] albumR = "The Rolling Stones"; MusicaR =[ "Route 66", "I Just Want to Make Love to You", "Honest I Do", "Mona (I Need You Baby)", "You Can Make It If You Try", "Little by Little", "I\'m a King Bee", "Carol", "Tell Me (You \'re Coming Back)", "Can I Get a Witness", "Tell Me (You\'re Coming Back)", "Walking the Dog" ] # Evento duplo clique do treeview def duplo_clique(*args): item = disco.selection()[0] rodape["text"] = disco.item(item,"text") # Cria componentes rotulo = Label(formulario, text="Duplo clique em um node da arvore:") rodape = Label(formulario, text="Evento do mouse") disco = Treeview(formulario) # Define tamanho da coluna disco.column("#0",minwidth=0,width=250) # Cria barra de rolagem barra = Scrollbar(formulario, orient='vertical', command=disco.yview) # Adiciona barra de rolagem disco.configure(yscroll=barra.set) barra.pack( side = RIGHT, fill=Y ) # Cria cabeçario do treeview disco.heading('#0', text='Primeiro Album', anchor='w') # Insere Node principal titulo = disco.insert('', 'end', text="Discografia", open=False) # Insere nodes filhos bandaB = disco.insert(titulo, 'end', text="Beatles") bandaR = disco.insert(titulo, 'end', text="Rolling Stones") # Insere variaveis album1 = disco.insert(bandaB, 'end', text=albumB) album2 = disco.insert(bandaR, 'end', text=albumR) # Insere Arrays b=0 r=0 for b in MusicaB: disco.insert(album1, 'end', text=b) for r in MusicaR: disco.insert(album2, 'end', text=r) # Cria evento duplo clique disco.bind("<Double-Button-1>", duplo_clique) # Posiciona componentes no formulario rotulo.pack(padx=20, pady=5) disco.pack(padx=20, pady=10) rodape.pack(padx=20, pady=5) # loop do tcl mainloop()
Se houvesse duas ou mais colunas na lista e eu quisesse recuperar o valor de apenas uma coluna para a Label, como eu faria?
Conceitualmente uma lista tem apenas uma coluna com seus objetos e um indice interno marcando a posição, mas vc quer uma lista contendo outras listas:
matrix = [
… [1, 2, 3, 4],
… [5, 6, 7, 8],
… [9, 10, 11, 12],
… ]
Resultado:
>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
Neste caso vc poderia pegar o indice da sua matriz e adicionar dentro do node desejado do tree view sem problemas.
Espero ter ajudado.
Abs.