MAB225 – Computação II – Aula 16/06/2011

MAB 225 - Computação II - Fabio Mascarenhas

Layout em linhas / Contas com salvar e carregar em arquivo (14/06/2011)

Layout em linhas

from Tkinter import *

f = Frame()

sf1 = Frame(f) # Linha 1
sf2 = Frame(f) # Linha 2
sf3 = Frame(f) # Linha 3
sf4 = Frame(f) # Linha 4
for sf in [sf1, sf2, sf3, sf4]:
    sf.pack()

# Linha 1
l1 = Label(sf1)
l1["text"] = "Linha 1"
l1.pack()

# Linha 2
l2 = Label(sf2)
l2["text"] = "Linha 2"
ct1 = Entry(sf2)
l2.pack(side = "left")
ct1.pack(side = "left")

# Linha 3
l3 = Label(sf3)
l3["text"] = "Linha 3"
ct2 = Entry(sf3)
l3.pack(side = "left")
ct2.pack(side = "left")

# Linha 4
b1 = Button(sf4)
b1["text"] = "Botao 1"
b2 = Button(sf4)
b2["text"] = "Botao 2"
b1.pack(side = "left")
b2.pack(side = "left")

for ctrl in [l1, l2, l3, ct1, ct2, b1, b2]:
    ctrl["font"] = "Arial 20"

f.pack()

mainloop()

Contas com salvar e carregar em arquivo

from datetime import date

def hoje():
    return str(date.today())

class Conta:
    def __init__(self, numero, nome, saldo = 0, lancamentos = []):
        self.numero = numero
        self.correntista = nome
        self.saldo = saldo
        self.lancamentos = lancamentos
    def __repr__(self):
        return "Conta(%s,%s,%s,%s)" % (repr(self.numero),\
                                       repr(self.correntista),\
                                       repr(self.saldo),\
                                       repr(self.lancamentos))
    def alterarNome(self, nome):
        self.correntista = nome
        salva_contas(contas)
    def deposito(self, valor, msg = "deposito"):
        self.lancamentos.append((hoje(), msg, valor))
        self.saldo = self.saldo + valor
        salva_contas(contas)
    def saque(self, valor, msg = "saque"):
        self.lancamentos.append((hoje(), msg, -valor))
        self.saldo = self.saldo - valor
        salva_contas(contas)
    def transferencia(self, outra, valor):
        self.saque(valor, "transferencia para %s" % outra.numero)
        outra.deposito(valor, "transferencia de %s" % self.numero)
    def extrato(self, data):
        linhas = []
        saldo = self.saldo
        i = len(self.lancamentos) - 1
        while i >= 0 and self.lancamentos[i][0] >= data:
            saldo = saldo - self.lancamentos[i][2]
            i = i - 1
        i = i + 1
        while i < len(self.lancamentos):
            datalanc, desc, val = self.lancamentos[i]
            saldo = saldo + val
            linhas.append("%s %-34s%10.2f%10.2f" % (datalanc, desc, val, saldo))
            i = i + 1
        return linhas

def salva_contas(contas, arq = "contas.repr"):
    f = open(arq, "w+")
    try:
        f.write(repr(contas))
    finally:
        f.close()

def le_contas(arq = "contas.repr"):
    f = open(arq)
    cs = None
    try:
        cs = eval(f.read())
    finally:
        f.close()
    return cs

try:
    contas = le_contas()
except IOError:
    contas = eval("""\
        {'768': Conta('768','Cicrano',70,\
         [('2011-05-01', 'abertura', 70)]),
         '123': Conta('123','Fulano',90.0,\
          [('2011-04-20', 'abertura', 100),\
           ('2011-05-10', 'saque', -30),\
           ('2011-05-15', 'deposito', 20),\
           ('2011-05-29', 'transferencia para 456', -50),\
           ('2011-05-30', 'deposito', 50.0)]),\
         '456': Conta('456','Beltrano',100,\
         [('2011-04-12', 'abertura', 50),\
          ('2011-05-29', 'transferencia de 123', 50)])}\
          """)