Quebrei muito a
cabeça sobre como criar e configurar uma TreeView, até que depois de muita
pesquisa na internet e muito consultar a documentação oficial do
GTK+ acabei conseguindo.
Vou tentar explicar
como se faz, mas o faço presumindo que você já tenha um
conhecimento básico sobre Python e Gtk+
Vejamos o código
abaixo:
#!/usr/bin/python3
#-*- coding: utf-8 -*-
from gi.repository import Gtk
class Janela_com_a_treeView(object):
def __init__(self):
modelo_treeView = Gtk.ListStore(str, int)
treeView = Gtk.TreeView(model = modelo_treeView)
coluna_nome = Gtk.TreeViewColumn('Nome', Gtk.CellRendererText(), text = 0)
coluna_idade = Gtk.TreeViewColumn('Idade', Gtk.CellRendererText(), text = 1)
treeView.append_column(coluna_nome)
treeView.append_column(coluna_idade)
lista_nomes = [['Marcio', 30], ['Isabela', 20], ['Jurandir', 50]]
for nomes in lista_nomes:
modelo_treeView.append(nomes)
modelo_treeView.append(['Jassira', 99])
modelo_treeView.append(['Ziraldo', 120])
janela = Gtk.Window(title = 'Janela contendo a TreeView')
janela.set_default_size(300, 300)
janela.connect('delete-event', Gtk.main_quit)
janela.add(treeView)
janela.show_all()
Janela_com_a_treeView()
Gtk.main()
Esse código cria
uma janela medindo 300 x 300 pixel contendo uma Tree View; A Tree
View por sua vez contém duas colunas, coluna Nome, e Coluna Idade.
Tentei fazer-lo o mais simples possível, usando o mínimo de widgets
para não complicar...
- Criando a Tree View:
Note que quando
criamos uma Tree View, temos que associar-la à um modelo, pois é no
modelo que inserimos os dados.
modelo_treeView =
Gtk.ListStore(str, int) => Aqui criamos o modelo para a Tree View.
treeView =
Gtk.TreeView(model = modelo_treeView) => Aqui Criamos a Tree View
e inserimos o modelo usando 'model = modelo_treeView'.
Também
poderíamos fazer de outra forma:
modelo_treeView =
Gtk.ListStore(str, int)
treeView =
Gtk.TreeView()
treeView.set_model(modelo_treeView)
Eu particularmente
prefiro a primeira forma, mas o resultado é o mesmo.
Ainda sobre o
modelo, note que entre os parênteses temos que definir o tipo de
dado que será inserido na coluna. No exemplo, a coluna_nome irá
receber textos(str), e a coluna_idade irá receber números
inteiros(int), o que resulta em:
modelo_treeView =
Gtk.ListStore(str, int)
- Criando as Colunas:
Agora passamos para
a criação das colunas:
coluna_nome =
Gtk.TreeViewColumn('Nome', Gtk.CellRendererText(), text = 0)
coluna_idade =
Gtk.TreeViewColumn('Idade', Gtk.CellRendererText(), text = 1)
Não tenho muito o
que explicar sobre esse assunto, ainda não aprendi o suficiente para
isso, como disse, vou compartilhar o que aprendi, o resto deixo para
quem já aprendeu :P
O que sei é que o
'text' lá no final tem que seguir uma ordem crescente que inicia no
0(zero) e soma um a cada coluna, quem souber mais fique a vontade para
comentar e nos ensinar. E o Gtk.CellRendererText() é usado quando se
insere textos, números ou qualquer coisa digitável, quando se quer
inserir imagens nas colunas usa-se Gtk.CellRendererPixbuf.
- Adicionando as colunas na Tree View:
A inserção das
colunas deve obedecer a sequencia dos tipos de dados do modelo, no
nosso código o primeiro tipo dado no modelo é str, logo a primeira coluna a ser adicionada é a que recebe dados de
textos, ou seja, coluna_nome.
Para adicionar
as colunas na Tree View usamos 'nossa_treeView.append_column(nossa_coluna)', o
que no nosso código resulta em:
*Note
que adicionamos uma coluna por vez.
treeView.append_column(coluna_nome)
– coluna que recebe str
treeView.append_column(coluna_idade)
– coluna que recebe int
- Inserindo Dados nas Colunas:
Agora vamos inserir
dados nas colunas da Tree View, sempre lembrando que na verdade
inserimos dados no modelo usado na Tree View, e não diretamente na
Tree View.
Usei duas maneiras
como exemplo, uma usando o comando 'for' para inserir dados a
partir de uma lista, e outra inserindo dados diretamente nas
colunas.
A inserção de
dados segue a sequencia em que foram inseridas as colunas na Tree
View.
Usando o 'for' para
adicionar dados a partir de uma lista:
lista_nomes =
[['Marcio', 30], ['Isabela', 20], ['Jurandir', 50]]
for nomes in
lista_nomes:
modelo_treeView.append(nomes)
Inserindo dados
diretamente nas colunas:
modelo_treeView.append(['Jassira',
99])
modelo_treeView.append(['Ziraldo',
120])
Um detalhe
importante:
Não se pode inserir dados em uma única coluna, quando
se insere dados na Tree View é preciso adicionar dados em todas as
colunas. Por exemplo, se quisermos deixar a coluna_nome em branco
usamos '' pois é uma coluna que
deve receber dados str,
com isso a coluna recebe uma string vazia, mas ainda assim recebe
dados, ou seja, uma string vazia.
modelo_treeView.append(['',
99])
Já a coluna_idade
não pode ficar em branco pois ela deve receber dados int,
o que podemos fazer é colocar um 0 (zero) para indicar a ausência
de valor.
modelo_treeView.append(['Jassira',
0])
O restante do código
já deve ser conhecido de quase todos:
janela =
Gtk.Window(title = 'Janela contendo a TreeView') => Cria a janela
janela.set_default_size(300,
300) => Define um tamanho para a janela
janela.connect('delete-event',
Gtk.main_quit) => Conecta o sinal de fechamento da janela
janela.add(treeView)
=> Adiciona a Tree View na janela
janela.show_all()
=> Mostra a Janela
Janela_com_a_treeView()
=> Inicia a classe responsável pela janela com a Tree View
Gtk.main() =>
Inicia o Loop que é interrompido ao fechar a janela ''janela.connect('delete-event', Gtk.main_quit)''.
Na próxima postagem irei falar um pouco mais sobre Treeview, com um exemplo um pouco maior. Até a próxima!