Lista Telefônica (Interface Gráfica)

Publicado por Rafael José (última atualização em 02/07/2011)

[ Hits: 9.357 ]

Download Lista Telefonica.py




Lista Telefônica básica em Python

  



Esconder código-fonte

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import shelve
from Tkinter import *
from Dialog import Dialog


class MainFrame(Frame):
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.grid()
        self.createWidgets()
        self.master.title("Lista Telefonica")
   
                                                                                                    
    def createWidgets(self):
        self.makeScreen()
        self.makeToolBar()
                                                                                                    
    def makeScreen(self):
        self.nome = StringVar()
        self.endereco = StringVar()
        self.telefone = StringVar()
   self.by = StringVar()

        Label(self, text="Nome:").grid(row=1, sticky=W)
        Label(self, text="Telefone:").grid(row=2, sticky=W)
        Label(self, text="Endereço:").grid(row=3, sticky=W)
   Label(self, text="Lista Telefonica em Python").grid(row=4, sticky=W)

        Entry(self, textvariable=self.nome).grid( \
              row=1, column=1, sticky=W+E)
        Entry(self, textvariable=self.endereco).grid( \
              row=2, column=1, sticky=W+E)
        Entry(self, textvariable=self.telefone).grid( \
              row=3, column=1, sticky=W+E)
     

    def makeToolBar(self):
        toolbar = Frame(self)
        toolbar.grid(row=5, columnspan=2)

        Button(toolbar, text="Adicionar", \
                 command=self.adicionar).grid(row=0,column=0)
        Button(toolbar, text="Gravar", \
                 command=self.gravar).grid(row=0,column=1)
        Button(toolbar, text="Remover", \
                 command=self.remover).grid(row=0,column=2)
        Button(toolbar, text="Procurar", \
                 command=self.procurar).grid(row=0,column=3)
        Button(toolbar, text="Listar", \
                 command=self.listar).grid(row=0,column=4)
        Button(toolbar, text="Sair", \
                 command=self.sair).grid(row=0,column=5)

    def adicionar(self):
        nome = self.nome.get()
        if not len(nome):
            Dialog(self, title="Erro", text="Nome inválido", \
                         bitmap='error', default=0, strings=('OK',))
            return

        if self.db.has_key(nome):
            Dialog(self, title="Erro", text="Nome já cadastrado", \
                         bitmap='error', default=0, strings=('OK',))
            return

        self.db[nome] = (self.endereco.get(), self.telefone.get())
        self.limpaCampos()

    def gravar(self):
        nome = self.nome.get()
        if not len(nome):
            Dialog(self, title="Erro!", text="Nome inválido", 
                         bitmap='error', default=0, strings=('OK',))
            return

        if not self.db.has_key(nome):
            Dialog(self, title="Erro", \
                         text="Este nome não esta registrado, use o botão adicionar", \
                         bitmap='error', default=0, strings=('OK',))
            return

        self.db[nome] = (self.endereco.get(), self.telefone.get())
        self.limpaCampos()

    def limpaCampos(self):
        self.nome.set("")
        self.telefone.set("")
        self.endereco.set("")
                                                                                                    
    def procurar(self):
        nome = self.nome.get()
        if not len(nome):
            Dialog(self, title="Erro", text="Este Nome não é válido!", \
                         bitmap='error', default=0, strings=('OK',))
            return

        if not self.db.has_key(nome):
            Dialog(self, title="Erro!", text="Nome inregistrado", \
                         bitmap='error', default=0, strings=('OK',))
            return

        self.telefone.set(self.db.get(nome, "")[0])
        self.endereco.set(self.db.get(nome, "")[1])

    def remover(self):
        nome = self.nome.get()
        if not len(nome):
            Dialog(self, title="Erro", text="Este Nome não é válido", \
                         bitmap='error', default=0, strings=('OK',))
            return

        if not self.db.has_key(nome):
            Dialog(self, title="Erro", text="Nome inregistrado", \
                         bitmap='error', default=0, strings=('OK',))
            return

        self.telefone.set(self.db.get(nome, "")[0])
        self.endereco.set(self.db.get(nome, "")[1])

        resposta = Dialog(self, title="Confirmação de seguranca", \
                   text="Deseja mesmo remover?", \
                   bitmap='question', default=1, strings=('Sim', 'Não'))
        if resposta.num == 0:
            del self.db[nome]
            self.limpaCampos()

    def listar(self):
        print "%-30s | %-20s | %-10s" % ("Nome", "Telefone", "Endereço")
        print "%-30s-+-%-20s-+-%-10s" % ("-" * 30, "-" * 20, "-" * 10)
        for k in self.db.keys():
            print "%-30s | %-20s | %-10s" % (k, self.db[k][0], \
                  self.db[k][1])
        print

    def sair(self):
        resposta = Dialog(self, title="Confirmação", \
                                text="Realmente quer sair?", \
                                bitmap='question', default=1, \
                                strings=('Sim', 'Não'))
        if resposta.num == 0: self.quit()

    def setDB(self, db):
        self.db = db

def main():
    db = shelve.open("teste.db")
    frm = MainFrame()
    frm.setDB(db)
    frm.mainloop()
    print "Fechando..."
    db.close()

if __name__ == '__main__':
    main()

Scripts recomendados

Raizes de Função Quadrática

Cifra de César com lista

Calculado em python

Contagem regressiva ao sair

Um programa simples para gerar uma tabuada em python com menu utilizando laco for while try except e


  

Comentários
[1] Comentário enviado por Tacioandrade em 04/07/2011 - 01:45h

Este é um bom exemplo de um pequeno programa em Python, porem, acho que ficou faltando salvar em algum lugar os endereços, mesmo em um arquivo .txt.

[2] Comentário enviado por super64 em 04/07/2011 - 09:02h

É possível redirecionar o fluxo de saída para um arquivo .txt, reconfigurando "sys.stdout" para que o comando "print" grave em um arquivo.

[3] Comentário enviado por Räfael em 06/07/2011 - 12:43h

Ele salva os endereços no "teste.db". Mais também é uma opção salvar em .txt

[4] Comentário enviado por rbalves em 06/05/2013 - 21:13h

ola galera
sou iniciante em python mas to bem empolgado e desejo aprender cada vez mais
como faço pra obter o arquivo dialog pra poder importa-lo
desde ja agradeço


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts