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

MAB 225 - Computação II - Fabio Mascarenhas

Interfaces Gráficas III (09/06/2011)

Caixa de Lista com Barra de Rolagem

from Tkinter import *
from contas import *

f = Frame()

frame_caixa = Frame(f)
lb = Listbox(frame_caixa)
lb["font"] = "Courier 16"
lb["width"] = 70
sb = Scrollbar(frame_caixa)  # barra de rolagem e do FRAME
sb["command"] = lb.yview
lb["yscrollcommand"] = sb.set

var = StringVar()

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

frame_opbotao = Frame(f)
lista = OptionMenu(frame_opbotao, 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(frame_opbotao)
botao["font"] = "Arial 16"
botao["command"] = cmd
botao["text"] = "Ok"

f.pack(expand = True, fill = "both")
lb.pack(side = "left", expand = True, fill = "both")
sb.pack(side = "right", fill = "y")
frame_caixa.pack(expand = True, fill = "both")
lista.pack(side = "left", expand = True, fill = "x")
botao.pack(side = "right")
frame_opbotao.pack(fill = "x")

mainloop()

Parametrizando um Botão usando funções (função cmd_troca)

from contas import *
from Tkinter import *

f1 = Frame()

def troca(frame1, frame2):
    frame1.pack_forget()
    frame2.pack()

def deposita():
    try:
        val = f1_var.get()
        f1_var.set(0)
        contas[conta.get()].deposito(val)
        f2_label["text"] = "Saldo: %d" % contas[conta.get()].saldo
        troca(f1, f2)
    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)
    troca(f1, f3)

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 cmd_troca(frame1, frame2):
    def cmd():
        troca(frame1, frame2)
    return cmd

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"] = cmd_troca(f2, f1)
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"] = cmd_troca(f3, f1)
lb.pack()
f3_botao.pack()

mainloop()

Parametrizando um botão com uma classe (classe BotaoVoltar)

from contas import *
from Tkinter import *

f1 = Frame()

def troca(frame1, frame2):
    frame1.pack_forget()
    frame2.pack()

def deposita():
    try:
        val = f1_var.get()
        f1_var.set(0)
        contas[conta.get()].deposito(val)
        f2_label["text"] = "Saldo: %d" % contas[conta.get()].saldo
        troca(f1, f2)
    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)
    troca(f1, f3)

f1_texto = Entry(f1)
f1_texto["width"]= 10
f1_texto["font"] = "Arial 20"
f1_texto2 = Entry(f1)
f1_texto2["width"]= 10
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()

class BotaoVoltar:
    def __init__(self, f_botao, f_ret):
        self.frame1 = f_botao
        self.frame2 = f_ret
        self.botao = Button(f_botao)
        self.botao["text"] = "Voltar"
        self.botao["font"] = "Arial 20"
        self.botao["command"] = self.cmd
    def cmd(self):
        troca(self.frame1, self.frame2)
    def pack(self):
        self.botao.pack()

f2 = Frame()
f2_label = Label(f2)
f2_label["font"] = "Arial 20"
f2_botao = BotaoVoltar(f2, f1)
f2_label.pack()
f2_botao.pack()

f3 = Frame()
lb = Listbox(f3)
lb["font"] = "Courier 16"
lb["width"] = 70
f3_botao = BotaoVoltar(f3, f1)
lb.pack()
f3_botao.pack()

mainloop()

Vários botões para mostrar como a opção side funciona

from Tkinter import *

f = Frame()

f.pack()
bots = [ Button(f), Button(f), Button(f), Button(f), \
         Button(f), Button(f), Button(f), Button(f) ]
sides = [ "left", "right", "top", "bottom", \
          "left", "right", "top", "bottom" ]
for i in range(len(bots)):
    bots[i]["text"] = str(i)
    bots[i]["font"] = "Arial 24"
    bots[i].pack(side = sides[i])

mainloop()