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


Deixe um comentário

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 )

Foto do Google

Você está comentando utilizando sua conta Google. 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

%d blogueiros gostam disto: