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

MAB 225 - Computação II - Fabio Mascarenhas

Interfaces Gráficas II (07/06/2011)

Lista de Opção

from Tkinter import *

f = Frame()

var = StringVar()

items = [ "456", "123", "Opcao 3", "Item bem longo que espero que apareca" ]
var.set(items[1])

lista = OptionMenu(f, var, *items)
lista["font"] = "Arial 24"

def cmd():
    label["text"] = var.get()

botao = Button(f)
botao["font"] = "Arial 24"
botao["command"] = cmd
botao["text"] = "Ok"

label = Label(f)
label["font"] = "Arial 24"

lista.pack()
botao.pack()
label.pack()
f.pack()

mainloop()

Caixa de Lista

from Tkinter import *
from contas import *

f = Frame()

lb = Listbox(f)
lb["font"] = "Courier 16"
lb["width"] = 70
sb = Scrollbar(lb)

var = StringVar()

items = [ "456", "123", "Opcao 3", "Item bem longo que espero que apareca" ]
var.set(items[1])

lista = OptionMenu(f, var, *items)
lista["font"] = "Arial 16"

def cmd():
    conta = var.get()
    if conta in contas:
        for item in contas[conta].extrato("2011-01-01"):
            lb.insert(END, item)

botao = Button(f)
botao["font"] = "Arial 16"
botao["command"] = cmd
botao["text"] = "Ok"

lb.pack()
lista.pack()
botao.pack()
f.pack()

mainloop()

Depósito com extrato (opção, caixa de lista, frames, botões)

from contas import *
from Tkinter import *

f1 = Frame()

def deposita():
    try:
        val = f1_var.get()
        contas[conta.get()].deposito(val)
        f1.pack_forget()
        f2_label["text"] = "Saldo: %d" % contas[conta.get()].saldo
        f2.pack()
    except ValueError:
        print "nao foi numero"
        f1_var.set(0)

def extrato():
    lb.delete(0, END)
    for item in contas[conta.get()].extrato("2011-01-01"):
        lb.insert(END, item)
    f1.pack_forget()
    f3.pack()

f1_texto = Entry(f1)
f1_texto["font"] = "Arial 20"
f1_texto2 = Entry(f1)
f1_texto2["font"] = "Arial 20"
f1_botao = Button(f1)
f1_botao["font"] = "Arial 20"
f1_botao2 = Button(f1)
f1_botao2["font"] = "Arial 20"
f1_var = DoubleVar(f1)
f1_var.set(0)
f1_texto["textvariable"] = f1_var
f1_texto2["textvariable"] = f1_var
f1_botao["text"] = "Depositar"
f1_botao["command"] = deposita
f1_botao2["text"] = "Extrato"
f1_botao2["command"] = extrato
conta = StringVar()

items = contas.keys()
conta.set(items[1])

lista = OptionMenu(f1, conta, *items)
lista["font"] = "Arial 20"

lista.pack()
f1_texto.pack()
f1_texto2.pack()
f1_botao.pack()
f1_botao2.pack()
f1.pack()

def voltar_f2():
    f1_var.set(0)
    f2.pack_forget()
    f1.pack()

def voltar_f3():
    f3.pack_forget()
    f1.pack()

f2 = Frame()
f2_label = Label(f2)
f2_label["font"] = "Arial 20"
f2_botao = Button(f2)
f2_botao["text"] = "Voltar"
f2_botao["font"] = "Arial 20"
f2_botao["command"] = voltar_f2
f2_label.pack()
f2_botao.pack()

f3 = Frame()
lb = Listbox(f3)
lb["font"] = "Courier 16"
lb["width"] = 70
f3_botao = Button(f3)
f3_botao["text"] = "Voltar"
f3_botao["font"] = "Arial 20"
f3_botao["command"] = voltar_f3
lb.pack()
f3_botao.pack()

mainloop()

Calculadora

from Tkinter import *

calc = Frame()
f_num = Frame(calc)
f_teclado = Frame(calc)

num = Label(f_num)
var = IntVar()
var.set(0)
num["font"] = "Arial 20"
num["foreground"] = "red"
num["textvariable"] = var
num.pack()

def nada():
    pass

estado = { "memoria": None, "limpa": True, "acao": nada }

def cmd_num(n):
    def cmd():
        if estado["limpa"]:
            estado["limpa"] = False
            var.set(n)
        else:
            var.set(var.get() * 10 + n)
    return cmd

def cmd_mais():
    if estado["memoria"] == None:
        estado["memoria"] = var.get()
    else:
        estado["memoria"] = estado["memoria"] + var.get()
    var.set(estado["memoria"])
    estado["limpa"] = True
    estado["acao"] = cmd_mais

def cmd_menos():
    if estado["memoria"] == None:
        estado["memoria"] = var.get()
    else:
        estado["memoria"] = estado["memoria"] - var.get()
    var.set(estado["memoria"])
    estado["limpa"] = True
    estado["acao"] = cmd_menos

def cmd_mult():
    if estado["memoria"] == None:
        estado["memoria"] = var.get()
    else:
        estado["memoria"] = estado["memoria"] * var.get()
    var.set(estado["memoria"])
    estado["limpa"] = True
    estado["acao"] = cmd_mult

def cmd_div():
    if estado["memoria"] == None:
        estado["memoria"] = var.get()
    else:
        estado["memoria"] = estado["memoria"] / var.get()
    var.set(estado["memoria"])
    estado["limpa"] = True
    estado["acao"] = cmd_div

def cmd_limpa():
    var.set(0)
    estado["memoria"] = None
    estado["limpa"] = True
    estado["acao"] = nada

def cmd_igual():
    estado["acao"]()
    estado["memoria"] = None
    estado["acao"] = nada
    
teclado = [\
        [(1, nada), (2, nada), (3, nada), ("+", cmd_mais)],\
        [(4, nada), (5, nada), (6, nada), ("-", cmd_menos)], \
        [(7, nada), (8, nada), (9, nada), ("*",  cmd_mult)],\
        [("C", cmd_limpa), (0, nada), ("=", cmd_igual), ("/", cmd_div)]\
    ]
botoes = []

for i in range(len(teclado)):
    for j in range(len(teclado[0])):
        botao = Button(f_teclado)
        botao["text"] = str(teclado[i][j][0])
        if type(teclado[i][j][0]) == int:
            botao["command"] = cmd_num(teclado[i][j][0])
        else:
            botao["command"] = teclado[i][j][1]
        botao["font"] = "Arial 20"
        # botoes em grade
        botao.grid(column = j, row = i)
        botoes.append(botao)

f_num.pack(anchor = "e")
f_teclado.pack()
calc.pack()

mainloop()