Visual – Treeview – ttk – Python – Linux

Publicado: 16 de abril de 2014 em Python

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.

Treeview

Treeview

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()
comentários
  1. Rafael Serafim disse:

    Se houvesse duas ou mais colunas na lista e eu quisesse recuperar o valor de apenas uma coluna para a Label, como eu faria?

  2. 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.

Deixe uma resposta para Rafael Serafim Cancelar resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s