Pular navegação

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

  1. 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?

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

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

  4. 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 😉

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

  6. concegui, era clear() 😉

    ehauhaue

    abraço!

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

  8. legal, eu tava vendo por aí 😉

    estou aguardando seu tutorial xD

    abraço

  9. Olá!

    Cara, esse tutorial ficou muito bom! Finalmente entendi as ListStore!

    Abraços!

    InFog


Deixar mensagem para InFog Cancelar resposta