Aula 5 Interface Grfica
Parte 2
Tiago Cruz de Frana
[Link]@[Link]
Python Tiago Cruz de Frana
Exemplo de Interface Grfica
Python Tiago Cruz de Frana 2
Interfaces Grficas com Usurio
Do ingls, Graphic User Interface (GUI)
Populares no ambiente Desktop
Motivos da popularidade: facilidade de uso e a produtividade
Bibliotecas disponveis:
GTK+, QT, TK etc
[Link]
[Link]
[Link]
Python Tiago Cruz de Frana 3
Interfaces Grficas
Geralmente utilizam a metfora do desktop
Um espao em duas dimenses, que ocupado por
janelas retangulares, que representam aplicativos,
propriedades ou documentos
Janelas podem possuir controles e containers
Python Tiago Cruz de Frana 4
Interfaces Grficas
Controles de janelas
Objetos utilizados para interagir com o usurio ou para
apresentar informaes
Controles podem ter teclas de atalho (aceleradores)
Containers
Objetos que servem de repositrio para colees de outros
objetos
Python Tiago Cruz de Frana 5
Interfaces Grficas
Interface grfica espera por eventos e responde de
acordo
Eventos podem ser resultado da interao do usurio
Ex: cliques, arrastar de mouse, digitao ou ainda de eventos de
sistema como o relgio da mquina
A reao a um evento qualquer definida atravs de
funes callback
Essas funes so passadas como argumento para outras rotinas
Python Tiago Cruz de Frana 6
Controles
Lista de Controles
Rtulo (label)
Retngulo que exibe texto
Caixa de texto (text box)
rea de edio de texto
Boto (button)
rea que pode ser ativada interativamente
Boto de rdio (radio button)
Tipo especial de boto, com o qual so formados grupos aonde
apenas um pode ser apertado de cada vez
Python Tiago Cruz de Frana 7
Controles
Python Tiago Cruz de Frana 8
Controles
Python Tiago Cruz de Frana 9
Controles
Python Tiago Cruz de Frana 10
Controles
Python Tiago Cruz de Frana 11
Controles
Lista de Controles (continuao)
Boto de verificao (check button)
Boto que pode ser marcado e desmarcado
Barras de rolagem (scroll bars)
Controles deslizantes horizontais ou verticais, usados para
intervalos de valores numricos
Boto giratrio (spin button)
Caixa de texto com dois botes com setas ao lado que
incrementam e decrementam o nmero na caixa
Python Tiago Cruz de Frana 12
Controles
Python Tiago Cruz de Frana 13
Controles
Python Tiago Cruz de Frana 14
Controles
Python Tiago Cruz de Frana 15
Controles
Lista de Controles (continuao)
Barra de status (status bar)
Barra para exibio de mensagens, geralmente na parte inferior
da janela
Imagem (image)
rea para exibio de imagens
Python Tiago Cruz de Frana 16
Controles
Python Tiago Cruz de Frana 17
Controles
Python Tiago Cruz de Frana 18
Containers
Lista de Containers
Barra de menu (menu bar)
Sistema de menus, geralmente na parte superior da janela
Quadro (frame)
Objetos permanecem dentro de um retngulo
Tabela (table)
Coleo de compartimentos para fixar os objetos, distribudos
em linhas e colunas
Python Tiago Cruz de Frana 19
Containers
Python Tiago Cruz de Frana 20
Containers
Python Tiago Cruz de Frana 21
Containers
Python Tiago Cruz de Frana 22
Containers
Lista de Containers (continuao)
Caixa horizontal (horizontal box)
Semelhante tabela, porm apenas com uma linha
Caixa vertical (vertical box)
Semelhante tabela, porm apenas com uma coluna
Caderno (notebook)
Vrias reas que podem ser visualizadas uma de cada vez quando
selecionadas atravs de abas, geralmente na parte superior
Python Tiago Cruz de Frana 23
Containers
Python Tiago Cruz de Frana 24
Containers
Lista de Containers (continuao)
Barra de ferramentas (tool bar)
rea com botes para acesso rpido aos principais recursos do
aplicativo
Python Tiago Cruz de Frana 25
Containers
Python Tiago Cruz de Frana 26
Interfaces e Eventos de Tempo
Para tratar de eventos de tempo, as interfaces
grficas utilizam um recurso chamado temporizador
(timer)
O timer evoca a funo callback depois de um certo tempo
programado
Python Tiago Cruz de Frana 27
Bibliotecas Grficas
Camadas de portabilidade (bindings)
Tkinter (Tk)
PyGtk (Gtk)
PyQt (Qt)
Multiplataforma (MS-Windows, Unix/Linux, OSX)
Python Tiago Cruz de Frana 28
TK
(baseado no material do prof. Paulo Roma)
Tk (Tool Kit) leve, porttil e robusto
Um tanto obsoleto frente a outros toolkits mais modernos
como Qt ou Gtk
Toolkit originalmente criado para utilizao com a
linguagem script Tool Command Lang. (Tcl)
Python Tiago Cruz de Frana 29
Tk
Camada Tkinter normalmente distribuda com o
Python
Inicia um processo Tcl que toma conta dos elementos de
interface
Classes e funes do Tkinter se comunicam com o
interpretador Tcl para especificar aspecto e comportamento
da interface
Python Tiago Cruz de Frana 30
Uso do Tk
Para importar o mdulo Tkinter
from Tkinter import *
Elementos de interface (widgets)
Frame (rea retangular)
Button (boto)
Label (rtulo)
Text (caixa de texto)
Canvas (caixa de desenho)
Python Tiago Cruz de Frana 31
Uso do Tk
Os elementos da interface so objetos de classes
diferentes
A posio e tamanho dos elementos so
controlados por gerentes de geometria
Pack (mais comum), Place, Grid
Python Tiago Cruz de Frana 32
Uso de Tk
Criando um widget
Informe um Pai (widget pai) usando o parmetro master
Informe onde seu widget ir se encaixar
btn = Button(pai,text=Cancelar,command=cancelar)
Uma janela default ser usada
master=None (default) indica que o widget ser filho da
janela principal
Outras janelas podem ser criadas criando objetos da classe
Toplevel
Python Tiago Cruz de Frana 33
Uso de Tk
top = Toplevel()
[Link]("About this application...")
msg = Message(top, text=about_message)
[Link]()
button = Button(top, text="Dismiss",
command=[Link])
[Link]()
Python Tiago Cruz de Frana 34
Exemplo
Application herda
de Frame
Construtor da
superclasse
Rtulo no Boto
Lao onde so tratados os eventos
Python Tiago Cruz de Frana 35
Sada do Exemplo
Python Tiago Cruz de Frana 36
Lista de Componentes Tk
Python Tiago Cruz de Frana 37
Componentes
Label
Mostra um texto ou uma imagem
from Tkinter import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
lb1 = Label(text="MeuTexto")
[Link]()
[Link]()
app = Application()
mainloop()
Python Tiago Cruz de Frana 38
Componentes
Message
Similar ao widget Label, mas tem mais facilidade para
mostrar texto quebrado em linhas
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
var = StringVar()
label = Message(textvariable=var, relief=RAISED)
[Link]("Hey!? How are you doing?")
[Link]()
Python Tiago Cruz de Frana 39
Componentes
Button
Um boto simples usado para executar um comando
from Tkinter import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
[Link] = Button(self,text="Sair",command=[Link])
[Link]()
[Link]()
app = Application()
mainloop()
Python Tiago Cruz de Frana 40
Componentes
Entry
Um campo para entrada de uma linha de texto
from Tkinter import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
entr = Entry()
[Link]()
[Link]()
app = Application()
mainloop()
Python Tiago Cruz de Frana 41
Componentes
Checkbutton
Representa uma varivel que pode ter dois valores distintos
(tipicamente um valor booleano)
from Tkinter import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
checkb = Checkbutton(text="Me marque")
[Link]()
[Link]()
app = Application()
mainloop()
Python Tiago Cruz de Frana 42
Componentes
Radiobutton
Representa um possvel valor de uma varivel que tem um de
muitos valores
R1 = Radiobutton(text="Option 1", value=1)
[Link]()
R2 = Radiobutton(text="Option 2", value=2)
[Link]()
R3 = Radiobutton(text="Option 3", value=3)
[Link]()
[Link]()
Python Tiago Cruz de Frana 43
Componentes
Listbox
Mostra uma lista de alternativas. Pode ser configurado para ter
comportamento de checkbutton ou radiobutton
Lb1 = Listbox()
[Link](1, "Python")
[Link](2, "Perl")
[Link](3, "C")
[Link](4, "PHP")
[Link](5, "JSP")
[Link](6, "Ruby")
[Link]()
[Link]()
Python Tiago Cruz de Frana 44
Componentes
Frame
Usado para agrupar widgets
Python Tiago Cruz de Frana 45
Componentes
Frame
Usado para agrupar widgets. Aps o Frame.__init__(self, master),
frame = Frame()
[Link]()
bottomframe = Frame()
[Link](side = BOTTOM)
redbutton = Button(frame, text="Red", fg="red")
[Link](side = LEFT)
greenbutton = Button(frame, text="Brown", fg="brown")
[Link](side = LEFT)
bluebutton = Button(frame, text="Blue", fg="blue")
[Link](side = LEFT)
blackbutton = Button(bottomframe, text="Black", fg="black")
[Link](side = BOTTOM)
Python Tiago Cruz de Frana 46
Componentes
Canvas
Funciona como a tela de um pintor onde possvel desenhar
outras formas
from Tkinter import *
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
canvas = Canvas(background='white')
[Link]()
texto = canvas.create_text(100, 75, text="Alo mundo!")
[Link]()
app = Application()
mainloop()
Python Tiago Cruz de Frana 47
Componentes
Canvas
# envia uma mensagem para o canvas orientando-o
# a trocar algumas caractersticas do objeto texto
[Link](texto, font=('SansSerif', '36'), fill='red',
anchor=NW)
Python Tiago Cruz de Frana 48
Componentes
Menu
Um painel de menu. Implementa menus de janela, pulldowns e popups
def __init__(self, master=Tk()):
Frame.__init__(self, master)
menubar = Menu()
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="New")
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="Save as...")
filemenu.add_command(label="Close")
filemenu.add_separator()
filemenu.add_command(label="Exit", command=quit)
menubar.add_cascade(label="File", menu=filemenu)
[Link](menu=menubar)
Python Tiago Cruz de Frana 49
Componentes
Scale
Permite especificar um valor atravs de um ponteiro em uma escala linear
from Tkinter import *
def sel():
selection = "Value = " + str([Link]())
[Link](text = selection)
root = Tk()
var = DoubleVar()
scale = Scale( root, variable = var )
[Link](anchor=CENTER)
button = Button(root, text="Get Scale Value", command=sel)
[Link](anchor=CENTER)
label = Label(root)
[Link]()
[Link]()
Python Tiago Cruz de Frana 50
Componentes
Scrollbar
Rolamento para widgets com superfcie til varivel (Text, Canvas, Entry, Listbox)
from Tkinter import *
root = Tk()
scrollbar = Scrollbar(root)
[Link]( side = RIGHT, fill=Y )
mylist = Listbox(root, yscrollcommand = [Link] )
for line in range(100):
[Link](END, "This is line number " + str(line))
[Link]( side = LEFT, fill = BOTH )
[Link]( command = [Link] )
mainloop()
Python Tiago Cruz de Frana 51
Componentes
Text
Exibe e permite editar texto formatado. Tambm suporta imagens
e janelas embutidas
text = Text(root)
[Link](INSERT, "Hello.....")
[Link](END, "Bye Bye.....")
[Link]()
text.tag_add("here", "1.0", "1.4")
text.tag_add("start", "1.8", "1.13")
text.tag_config("here", background="yellow", foreground="blue")
text.tag_config("start", background="black", foreground="green")
Python Tiago Cruz de Frana 52
Componentes
Toplevel
Uma janela separada
from Tkinter import *
root = Tk()
top1 = Toplevel()
top2 = Toplevel(bg="black")
mainloop()
Python Tiago Cruz de Frana 53
Classe Tk
Define janela principal e interpretador Tcl
Geralmente essa classe no precisa ser instanciada
instanciada automaticamente quando um widget filho criado
Se desejar, pode instanciar a classe de forma explcita
Possui vrios mtodos
Ex: title (string) - Especifica o ttulo da janela
Ex: geometry(string) - Especifica tamanho e posio da janela
Python Tiago Cruz de Frana 54
Exemplo
Ttulo no topo da tela
Largura, altura e
posicionamento x e y na tela
Python Tiago Cruz de Frana 55
Sada
Python Tiago Cruz de Frana 56
Opes de Widgets
Widgets (elementos de interface) tm opes com
nomenclatura unificada.
Ex.:
text Texto mostrado no elemento
background cor de fundo
foreground cor do texto
font fonte do texto
relief relevo da borda ('flat', 'raised', 'ridge', 'sunken', 'groove')
Python Tiago Cruz de Frana 57
Opes de Widgets
Formas de se especificar opes
Atravs do construtor
Ou usando o mtodo configure
Python Tiago Cruz de Frana 58
Mais Exemplo
Python Tiago Cruz de Frana 59
Gerenciador Pack
Sintaxe: pack(opes)
Espao do pai uma rea a ser preenchida pelos filhos
Empacota elementos filhos ao pai
Usa lado especificado pelo desenvolvedor
Os lados possveis so 'top', 'left', 'right' e 'bottom'
Python Tiago Cruz de Frana 60
Exemplo
Python Tiago Cruz de Frana 61
Redimensionando
Duas opes controlam o redimensionamento dos
filhos
expand (booleano) - Se verdadeiro, indica que o filho deve
tomar toda a cavidade disponvel no pai
Caso contrrio, toma apenas o espao necessrio (default)
Fill ('none', 'x', 'y' ou 'both')
Indica como o desenho do elemento ir preencher o espao alocado
'x' / 'y' indica que ir preencher a largura / altura
'both' indica preenchimento de todo o espao
'none' indica que apenas o espao necessrio ser ocupado (default)
Python Tiago Cruz de Frana 62
Exemplo de Redimensionamento
Python Tiago Cruz de Frana 63
Exerccio 1 (executar e maximizar janela)
from Tkinter import *
top = Frame()
[Link](fill='both', expand=True)
a = Label (top, text="A")
[Link](side="left",fill="y")
b = Label (top, text="B")
[Link] (side="bottom",fill="x")
c = Label (top, text="C")
[Link] (side="right")
d = Label (top, text="D")
[Link] (side="top")
for widget in (a,b,c,d):
[Link](relief="groove", border=10, font="Times 24 bold")
[Link]()
Python Tiago Cruz de Frana 64
Exerccio 2 (executar e maximizar janela)
from Tkinter import *
top = Frame()
[Link](fill='both', expand=True)
a = Label (top, text="A)
[Link] (side="left",expand=True,fill="y")
b = Label (top, text="B)
[Link] (side="bottom",expand=True,fill="both")
c = Label (top, text="C")
[Link] (side="right)
d = Label (top, text="D")
[Link] (side="top")
for widget in (a,b,c,d):
[Link](relief="groove", border=10, font="Times 24 bold")
[Link]()
Python Tiago Cruz de Frana 65
Usando Frames para Auxiliar Layout
Exerccio 3: executar e ampliar janela
from Tkinter import *
top = Frame() ; [Link](fill='both', expand=True)
f = Frame (top); [Link] (fill='x')
a = Label (f, text="A")
b = Label (f, text="B")
c = Label (f, text="C")
d = Label (top, text="D")
for w in (a,b,c,d):
[Link](relief="groove", border=10, font="Times 24 bold")
[Link](side="left", expand=True, fill="both")
[Link]()
Python Tiago Cruz de Frana 66
Programao com Eventos
Sistema pode controlar o programa
No Tk, mainloop
Eventos
Clique em item do menu, ou no boto
Arrastado do mouse sobre janela
Alterar valor de caixa de texto
Para tratar os eventos, se usa o Callback
Python Tiago Cruz de Frana 67
Programao com Eventos - command
Principais componentes do Tk possuem a opo
command
Command indica qual funo a ser invocada sempre que o
widget acionado
Tipicamente, a funo (ou mtodo) usado obtm valores
de outros widgets para realizar alguma operao
Python Tiago Cruz de Frana 68
Exemplo
Execute e clique no boto
from Tkinter import *
def inc():
n=int([Link]("text")[4])+1
[Link](text=str(n))
b = Button(text="Incrementa",command=inc)
[Link]()
rotulo = Label(text="0")
[Link]()
mainloop()
Python Tiago Cruz de Frana 69
Eventos e Bind
Tratando eventos de Widgets sem command
Uso do metodo bind que permite especificar um padro de
eventos ao qual o widget ser sensvel e uma rotina
callback para trat-lo
bind (padrao, rotina)
padro uma string que descreve quais eventos a rotina ir
tratar
rotina uma funo ou mtodo com exatamente um parmetro:
o evento que deve ser tratado
Python Tiago Cruz de Frana 70
Exemplo
Clicar sobre a janela
para testar
from Tkinter import *
def clica (e):
txt = "Mouse clicado em\n%d,%d"%(e.x,e.y)
[Link](text=txt)
r = Label()
[Link](expand=True, fill="both")
[Link]("200x200")
[Link]("<Button-1>", clica)
mainloop()
Python Tiago Cruz de Frana 71
Campos do objeto evento
x,y : posio do mouse com relao ao canto superior esquerdo
do widget
x_root, y_root: posio do mouse com relao ao canto superior
esquerdo da tela
char: caractere digitado (eventos de teclado)
keysym: representao simblica da tecla
keycode: representao numrica da tecla
num: nmero do boto 1/2/3=Esquerdo/Meio/Direito
(eventos de mouse)
widget: o objeto que gerou o evento
width,height: largura e altura do widget (evento Configure)
Python Tiago Cruz de Frana 72
Padres de evento (mouse)
<Button-i> para i = 1,2,3: boto i do mouse pressionado
sobre o widget
<Motion> : mouse arrastado sobre o widget
<Bi-Motion> : mouse arrastado sobre o widget com o boto i
pressionado
<ButtonRelease-i> : boto i do mouse solto sobre o widget
<Double-Button-i>: boto i do mouse clicado duas vezes em
seguida
<Enter>: O mouse entrou na rea do widget
<Leave>: O mouse saiu da rea do widget
Python Tiago Cruz de Frana 73
Padres de evento (teclado)
caracter : O caracter foi digitado sobre o widget
<Key>: Algum caracter foi digitado sobre o widget
<Return>: Tecla enter foi digitada
<Tab>, <F1>, <Up>...: A tecla correspondente foi digitada
<Shift-Tab>, <Alt-F1>, <Ctrl-Up>...: Tecla com modificador
Para os eventos serem gerados, preciso que o foco de
teclado esteja sobre o widget
Depende do sistema de janelas
O foco para um widget pode ser forado usando o mtodo focus
Python Tiago Cruz de Frana 74
Exemplo
clicar e teclar algo sobre o foco tem que ser o widget
from Tkinter import *
def clica (e):
txt = "Mouse clicado em\n%d,%d"%(e.x,e.y)
[Link](text=txt)
[Link]()
def tecla(e):
txt="Keysym=%s\nKeycode=%s\nChar=%s"%([Link],[Link],[Link])
[Link](text=txt)
r = Label()
[Link](expand=True, fill="both")
[Link]("200x200")
[Link]("<Button-1>", clica)
[Link]("<Key>", tecla)
mainloop()
Python Tiago Cruz de Frana 75
Menus
Podem ser associados a uma janela (menus toplevel),
pulldown, popup e em cascata a partir de outro menu
Todos so instncias da classe Menu
Um menu composto de itens que podem ser
command quando pressionado executa uma callback
checkbox parecido com command, mas tem um valor booleano
associado
radiobutton como command, mas representa um de vrios estados
mutuamente exclusivos
cascade ativa um outro menu em cascata
Para adicionar um item a um menu, use mtodos da forma
add (tipo, opes) ou add_tipo(opes)
Python Tiago Cruz de Frana 76
Menu de janela (toplevel)
tipicamente exibido horizontalmente no topo da
janela
Aspecto depende do sistema operacional
Se um outro menu associado como item cascade, ele
tratado como pulldown, isto , exibido sob o item
do menu de janela
Assim como outros menus, no necessita ter sua
geometria gerenciada (e.g., pack ou grid)
Para associar a uma janela, usa-se a opo menu do
objeto janela.
Python Tiago Cruz de Frana 77
Exemplo
Clique na opo Arquivo
from Tkinter import *
def abrir(): print "abrir"
def salvar(): print "salvar"
def ajuda(): print "ajuda"
top=Tk()
principal=Menu(top)
[Link](menu=principal)
arquivo=Menu(principal)
arquivo.add_command(label="Abrir",command=abrir)
arquivo.add_command(label="Salvar",command=salvar)
principal.add_cascade(label="Arquivo",menu=arquivo)
principal.add_command(label="Ajuda",command=ajuda)
mainloop()
Python Tiago Cruz de Frana 78
Menu Popup
Um menu popup aquele que exibido numa
janela independente
Para que o menu seja exibido, preciso invocar o
mtodo post:
post (x, y)
Onde x e y so as coordenadas do canto superior esquerdo do
menu com relao ao canto superior esquerdo da tela
Python Tiago Cruz de Frana 79
Exemplo
Tente rodar e clicar com o btn direito do mouse
from Tkinter import *
def alo():
print "Alo!"
root = Tk()
menu = Menu(root, tearoff=0)
menu.add_command(label="Alo 1", command=alo)
menu.add_command(label="Alo 2", command=alo)
def popup(e):
[Link](e.x_root, e.y_root)
frame = Frame(root, width=200, height=200)
[Link]()
[Link]("<Button-3>", popup)
mainloop()
Python Tiago Cruz de Frana 80
Variveis
Quem controla o Tk o interpretador Tcl
No o Python quem controla ele diretamente
Em alguns casos, deseja-se usar variveis na
interface
Por exemplo, possvel especificar que o texto exibido em
um Label o valor de uma varivel (e no uma constante)
Nesse caso, usa-se a opo textvar ao inves de text
Python Tiago Cruz de Frana 81
Variveis
Variveis Tcl so expostas aplicao Python
atravs das classes StringVar, IntVar e DoubleVar
O construtor da forma StringVar(master) onde master
uma janela ou widget
Instncias dessas classes possuem os mtodos get e
set que podem ser usados para acessar os valores
armazenados no interpretador Tcl
Python Tiago Cruz de Frana 82
Exemplo
Rode o cdigo e veja voc mesmo
from Tkinter import *
root = Tk()
soma = DoubleVar(root)
parcela = DoubleVar(root)
def aritmetica (e):
[Link]([Link]()+[Link]())
lsoma = Label(textvar=soma)
eparcela = Entry(textvar=parcela)
[Link]("<Return>", aritmetica)
[Link]()
[Link]()
mainloop()
Python Tiago Cruz de Frana 83
Checkbuttons
Checkbutton Representa uma varivel que pode ter
dois valores distintos (tipicamente um valor
booleano)
O valor alterado quando se clica no boto
A callback especificada pela opo command cha
mada sempre que a varivel muda de valor
Estado armazenado pela varivel Tcl especificada
pela opo variable
Python Tiago Cruz de Frana 84
Checkbuttons
Se a varivel inteira, o valor correspondente ao ch
eckbutton desligado/ligado 0/1
possvel usar um checkbutton com uma varivel st
ring
Nesse caso, os valores correspondentes a desligado/lig-
ado so especificados com as opes offvalue e onvalue
Python Tiago Cruz de Frana 85
Exemplo
from Tkinter import *
root = Tk()
v1 = IntVar(root)
v2 = StringVar(root)
def exibe():
[Link] (text="v1=%d,v2=%s"%([Link](),[Link]()))
c1 = Checkbutton (text="V1", var=v1, command=exibe)
c2 = Checkbutton (text="V2", var=v2, command=exibe,
onvalue="Sim", offvalue="Nao")
l = Label()
for w in (c1,c2,l):
[Link]()
exibe()
mainloop()
Python Tiago Cruz de Frana 86
Radiobuttons
Radiobutton representa um possvel valor de uma
varivel que tem um de muitos valores. Clicando o
boto, a varivel assume aquele valor
A varivel especificada com a opo variable e o
valor associado com a opo value
Os radiobuttons que se referem mesma varivel
funcionam em conjunto
Ex.: ligar um faz com que outro seja desligado
Python Tiago Cruz de Frana 87
Radiobuttons
Um radiobutton mostrado com um indicador ao
lado
Pode-se desabilitar o indicador usando a opo
indicatoron=False
Nesse caso, mostrado como um boto normal
Python Tiago Cruz de Frana 88
Exemplo
from Tkinter import *
root=Tk()
cor = StringVar(root)
[Link]("black")
l = Label(background=[Link]())
[Link](fill='both',expand=True)
def pinta():
[Link](background=[Link]())
for txt,val in (("preto","black"),
("vermelho","red"),
("azul","blue"),
("verde","green")):
Radiobutton(text=txt,value=val,variable=cor,command=pinta).pack(anchor=W)
mainloop()
Python Tiago Cruz de Frana 89
Exerccio
Substitua os radiobuttons do exemplo anterior por
botes.
Python Tiago Cruz de Frana 90
Resposta
from Tkinter import *
root=Tk()
cor = StringVar(root)
[Link]("black")
l = Label(background=[Link]())
[Link](fill='both',expand=True)
def pinta():
[Link](background=[Link]())
for txt,val in (("preto","black"),
("vermelho","red"),
("azul","blue"),
("verde","green")):
Radiobutton(text=txt,value=val,variable=cor,
command=pinta,indicatoron=False).pack(fill='x')
mainloop()
Python Tiago Cruz de Frana 91
Entry
Um Entry permite entrada/edio de uma linha de
texto
O texto associado ao Entry normalmente
armazenado numa varivel indicada pela opo
textvariable
Se no indicada, usada uma varivel interna cujo valor
pode ser obtido usando o mtodo get()
Python Tiago Cruz de Frana 92
Entry
H diversos mtodos para manipular diretamente o
texto
Usam o conceito de ndices
Por exemplo, o ndice INSERT indica a posio do texto onde o
cursor de insero se encontra, sendo 0 a posio antes do
primeiro caractere e END a posio ao final do texto
Python Tiago Cruz de Frana 93
Exemplo
from Tkinter import *
def insere():
[Link](INSERT,"*")
def limpa():
[Link](INSERT,END)
e=Entry(font="Arial 24")
i=Button(text="Insere*",command=insere)
l=Button(text="Limpa",command=limpa)
[Link]()
for w in (i,l):
[Link](side='left')
mainloop()
Python Tiago Cruz de Frana 94
Scrollbar
Barras de rolamento so usadas com outros widgets co
m rea til maior do que pode ser exibida na janela
(Canvas, Text, Listbox, Entry)
Uma barra de rolamento horizontal (vertical) funciona
chamando o mtodo xview (yview) do widget associado
Isto feito configurando a opo command da barra
Por outro lado, sempre que a viso do widget muda, a
barra de rolamento precisa ser atualizada
Isto feito configurando a opo xscrollcommand (ou
yscrollcommand) do widget ao mtodo set da barra
Python Tiago Cruz de Frana 95
Exemplo
from Tkinter import *
lb = Listbox()
[Link](side=LEFT,expand=True,fill="both")
sb = Scrollbar()
[Link](side=RIGHT,fill="y")
[Link](command=[Link])
[Link](yscrollcommand=[Link])
for i in range(100):
[Link](END,i)
mainloop()
Python Tiago Cruz de Frana 96
Canvas
Permite a exibio e edio de grficos estruturados 2D
Elementos grficos (itens) so introduzidos usando mtodos da
forma create_tipo (...), onde tipo pode ser
arc arco de crculo
bitmap imagem binria
image imagem colorida
line linha poligonal
oval crculos e elipses
polygon polgonos
rectangle retngulo
text texto
window um widget tk
Python Tiago Cruz de Frana 97
Exemplo
execute e veja (coloque uma img no mesmo diretrio do cdigo)
from Tkinter import *
c = Canvas()
[Link]()
o = c.create_oval(1,1,200,100,outline="blue",
width=5,fill="red")
widget = Button(text="Tk Canvas")
w = c.create_window(10,120,window=widget,anchor=W)
l = c.create_line(100,0,120,30,50,60,100,120,
fill="black",width=2)
r = c.create_rectangle(40,150,100,200,fill="white")
img = PhotoImage(file="./[Link]")
i = c.create_image (150,150,image=img,anchor=NW)
a = c.create_arc (150,90,250,190,start=30,extent=60,
outline="green",fill="orange")
t = c.create_text(200,35,text="Texto\nTexto",
font="Arial 22")
mainloop()
Python Tiago Cruz de Frana 98
Coordenadas de Itens
Todos os mtodos create_item tm como primeiros
argumentos um par de coordenadas x,y do item
Os itens oval e rectangle requerem mais um par de
coordenadas para delimitar a extenso (caixa envolvente)
Os itens line e polygon podem ser seguidos por outros
pares de coordenadas que especificam demais vrtices
Python Tiago Cruz de Frana 99
Coordenadas de Itens
As coordenadas referem-se a um sistema de
coordenadas prprio que pode ser diferente do da
janela
A rea do canvas que deve ser mostrada na janela pode
ser modificada pela opo
scrollarea=(xmin,ymin,xmax,ymax)
Para obter as coordenadas do canvas dadas as
coordenadas da janela usa-se os mtodos canvasx(x) e
canvasy(y)
Python Tiago Cruz de Frana 100
Refercias
Python para Desenvolvedores, 2 Ed.
Paulo Roma, UFRJ. [Link]
Python Tiago Cruz de Frana 115