Neste tutorial irei ensinar como criar uma ListStore em Python, utilizando o criador de interfaces Glade e PyGTK.
Primeiro crie uma interface como esta:
Salve com o nome que você quiser(no meu exemplo, eu salvei como Exemplo1.glade).
Em seguida crie os sinais da interface:
Feito isso, abra seu editor/IDE e insira o código comentado:
#!/usr/bin/env python #-*- encoding: utf8 -*- #Criação de uma liststore em Python, com PyGTK e Glade. #Autor: Philip Sampaio import gtk import gtk.glade import pygtk pygtk.require("2.0") class ListStoreSimples(object): def __init__(self): #Função de início.. é a primeira a ser carregada interface = gtk.glade.XML("Exemplo1.glade") self.winListStoreSimples = interface.get_widget("winListStoreSimples") self.entNome = interface.get_widget("entNome") self.entEmail = interface.get_widget("entEmail") self.trvListStore = interface.get_widget("trvListStore") #Montando a ListStore(ou tabela, como quiser) #A linha abaixo diz cria um modelo de liststore com 2 colunas, ambas sendo strings self.mdlListStore = gtk.ListStore( str, str) #A linha abaixo configura o modelo da treeview com o modelo acima self.trvListStore.set_model(self.mdlListStore) #Colocando as colunas colunaNome = gtk.TreeViewColumn("Nome",gtk.CellRendererText(), text=0) colunaEmail = gtk.TreeViewColumn("Email",gtk.CellRendererText(), text=1) #Adiciona à nossa treeview (trvListStore) self.trvListStore.append_column(colunaNome) self.trvListStore.append_column(colunaEmail) #Dicionário de conexões dic = { 'on_winListStoreSimples_destroy' : ( self.on_winListStoreSimples_destroy ), 'on_btnAdicionar_clicked' : ( self.on_btnAdicionar_clicked) } #Conecta os sinais interface.signal_autoconnect(dic) def main(self): #Inicia o loop GTK self.winListStoreSimples.show_all() gtk.main() def on_btnAdicionar_clicked(self,widget): #Sinal de clique do btnAdicionar nome = self.entNome.get_text() email = self.entEmail.get_text() #Preste atenção: você irá adicionar os dados no MODELO self.mdlListStore.append([ nome, email]) #As linhas comentadas abaixo são de exemplo. """info = [("Philip Sampaio","philip.sampaio@gmail.com"), ("Fulano" ,"fulano@gmail.com"), ("Maria" ,"Maria@gmail.com"), ("João" ,"Joao@gmail.com")] for coluna in info: print coluna[0], coluna[1] """ def on_winListStoreSimples_destroy(self,widget): #funcao para parar o loop gtk e encerrar o programa self.winListStoreSimples.hide_all() gtk.main_quit() if __name__ == '__main__': teste = ListStoreSimples() teste.main()
O resultado deve ser algo como isto:
Fácil, não?
Teste e estude o código! Pergunte se precisar de ajuda!
9 Comments
ouuuu! consegui fazer o código aq de boa.
Mas não entendi como vc conseguil criar aquele layout com um vbox e uma table.
Existe alguma forma de utilizar algo parecido com rowspan?
o que eu fiz foi um vbox com 2 linhas e uma table com 2 linhas e tres colunas. Mas como faz para o botao ocupar as duas linhas?
uma coisa q me esqueci é q uma boa dica para utilizar o glade é utilizar o glade2py também. Ele não faz muita coisa além de criar uma classe com todos as funcoes e widget utilizadas na tela, mas já é um boa quantidade de código economizado.
Home:
http://sane-pygtk.sourceforge.net/glade2py.html
Instalação:
wget -c http://ufpr.dl.sourceforge.net/sourceforge/sane-pygtk/glade2py-0.0.2.tar.gz
tar xvfz glade2py-0.0.2.tar.gz
cd glade2py-0.0.2
sudo python setup install
Valeu pela dica, Raphael!
Já tinha testado um programa similar a este. Não me lembro se é o mesmo! XD
Então.. eu criei um Vbox com 2 itens e dentro de um(o superior) eu coloquei uma tabela com 2 linhas e 3 colunas. Coloquei os widgets nos lugares e depois, como o botão adicionar ficou em uma linha, eu anexei ela à linha debaixo.
wowwww, muito bom seu tutorial,
depois vou tentar fazer!
vai me ajudar muito no programinha que tou fazendo pro meu pai, e para estudar python ao mesmo tempo! heauhuaeuhaeea
grande abraço 😉
tenho uma dúvida..
como faço para limpar a ListStore..
tipo, um botão limpar, que quando pressionado limpa e tal..
tentei substituir append por del, mas não deu..
abraço
concegui, era clear() 😉
ehauhaue
abraço!
Isso ae!
Dá pra fazer uns negócios legais como editar o conteúdo na própria ListStore(como é feito no dbgrid do delphi), adicionar imagens e barras de progresso!
Logo logo posto algum outro tutorial!
legal, eu tava vendo por aí 😉
estou aguardando seu tutorial xD
abraço
Olá!
Cara, esse tutorial ficou muito bom! Finalmente entendi as ListStore!
Abraços!
InFog