2. 2
Copyright c 2005 Carlos A. P. Campani.
´
E garantida a permiss˜o para copiar, distribuir e/ou
a
modificar este documento sob os termos da Licen¸a de
c
Documenta¸ao Livre GNU (GNU Free Documentation
c˜
License), Vers˜o 1.2 ou qualquer vers˜o posterior
a a
publicada pela Free Software Foundation; sem Se¸oes
c˜
Invariantes, Textos de Capa Frontal, e sem Textos de
Quarta Capa. Uma c´pia da licen¸a ´ inclu´ na se¸ao
o c e ıda c˜
intitulada ”GNU Free Documentation License”.
veja: http://www.ic.unicamp.br/~norton/fdl.html.
3. ˆ
REFERENCIAS 3
Referˆncias
e
[1] Catunda, Marco Python: guia de consulta r´pida, Ed.
a
Novatec, 2001.
[2] Python Documentation Index.
http://www.python.org/doc/.
[3] Lundh, Fredrik An Introduction to Tkinter, 1999.
http://www.pythonware.com/library/tkinter/
an-introduction-to-tkinter.pdf
5. ˆ
REFERENCIAS 5
Material do Curso
(Lˆminas do curso)
a
http://www.ufpel.tche.br/~campani/laminas.pdf
(Lˆminas para Impress˜o)
a a
http://www.ufpel.tche.br/~campani/laminas4.ps.gz
(Programas exemplo)
http://www.ufpel.tche.br/~campani/FileDialog.tar.gz
http://www.ufpel.tche.br/~campani/swpackage.tar.gz
6. ˆ
REFERENCIAS 6
Programas
• Python 2.1;
• Tk 8;
• Python-tkinter 2.1;
• vi;
• emacs;
• gnuplot e m´dulo Gnuplot;
o
8. ˆ
REFERENCIAS 8
Obtendo os Programas
• Pacotes rpm ou tarball;
• Bin´rio (pr´-compilado) ou source (tem que compilar);
a e
• P´ginas oficiais dos programas;
a
• Distribui¸˜es Linux;
co
• http://rpmfind.net;
• http://sourceforge.net.
9. ˆ
REFERENCIAS 9
Instalando os Programas em Linux
Instalando pacotes rpm:
$ su
<senha de root>
% rpm -i <arquivo pacote>
% ^D
$
Compilando o fonte:
$ su
<senha de root>
% cd <diret´rio do fonte>
o
% ./configure
% ./make
% ./make install
10. 1 OBJETIVOS DO CURSO 10
1 Objetivos do Curso
• Introduzir a linguagem Python para alunos que j´
a
saibam programar;
• Mostrar, de forma introdut´ria, aspectos avan¸ados
o c
de Python, tais como scripts para web, acesso a
MySQL, suporte a audio e OpenGL;
• Introduzir o toolkit Tk e mostrar como desenvolver
rapidamente aplica¸˜es baseadas em janelas
co
usando-o.
11. 2 CARACTER´
ISTICAS DE PYTHON 11
2 Caracter´
ısticas de Python
• Criada por Guido van Rossum em 1991;
• Evolu¸ao do C
c˜
• Linguagem de script e linguagem de programa¸ao;
c˜
– Exemplos de linguagens de script: Tcl, Perl, etc.
– Objetivo: substituir C e Java;
• Interpretada e interativa;
• Multiplataforma: Unices, Windows e Mac (no Linux
´ pr´-instalado);
e e
• Possui suporte a POO;
12. 2 CARACTER´
ISTICAS DE PYTHON 12
• Estruturas de controle e de dados avan¸adas (mais
c
poderosas que C e Java);
– Lista encadeada e tabela hash como primitivas da
linguagem;
– Tratamento de erros de execu¸˜o;
ca
• Dispensa BEGIN e END (obriga a endenta¸ao e a
c˜
estrutura¸˜o do programa);
ca
• Tipagem dinˆmica (n˜o ´ necess´rio declarar
a a e a
vari´veis);
a
• Combinados, os ultimos trˆs itens significam que os
´ e
programas em Python s˜o muito menores e mais
a
“limpos” que os equivalentes em C e Java;
13. 2 CARACTER´
ISTICAS DE PYTHON 13
• Mais verifica¸˜es de erros de sintaxe/execu¸ao que C;
co c˜
• Modular (organiza o namespace);
from Tkinter import *
root = Tk()
ou
import Tkinter
root = Tkinter.Tk()
• Ideal para prototipa¸ao r´pida de aplica¸oes;
c˜ a c˜
• Gr´ficos em janelas usando-se m´dulo Tkinter;
a o
• Pode ser extendida usando-se C e C++
(escrevendo-se novos m´dulos);
o
14. 2 CARACTER´
ISTICAS DE PYTHON 14
• Profiling;
• Programa¸˜o cient´
ca ıfica (NumPy e Gnuplot);
• Computa¸˜o gr´fica (PyOpenGL);
ca a
• Acesso ao servidor MySQL (Python-MySQLdb);
• Linguagem de Cola (glue language);
Exemplo: vocˆ pode usar em FORTRAN aquele
e
pacote gr´fico que s´ funciona em C;
a o
• Scripts CGI (usando-se m´dulo CGI);
o
´
• Finalmente: E software livre!
15. 3 ´
TEORIA VERSUS PRATICA 15
3 Teoria Versus Pr´tica
a
• “Aprender a sintaxe de uma linguagem n˜o ´ tudo”;
a e
• Metodologia de desenvolvimento de software;
– M´todos sistem´ticos;
e a
– Redu¸ao de problemas;
c˜
– Herdar resultados;
– Semˆntica formal;
a
• Teoria e pr´tica andam juntas.
a
16. 4 USANDO O INTERPRETADOR 16
4 Usando o Interpretador
4.1 Usando o Interpretador - Modo Interativo
$ python
Python 2.1 (#1, jul 4 2001, 23:56:02)
[GCC 2.95.3 200110315 (release) (conectiva)] on linux-i386
Type "copyright", "credits" or "license" for more information.
>>>
17. 4 USANDO O INTERPRETADOR 17
Control-D abandona o interpretador.
>>> ^D
$
18. 4 USANDO O INTERPRETADOR 18
>>> 2+2
4
>>> 2+
File "<stdin>", line 1
2+
^
SyntaxError: invalid syntax
>>> # Este ´ um coment´rio
e a
... 2*2
4
>>> 7/3
2
>>> 7./3.
2.3333333333333335
Observe o prompt secund´rio ...
a
19. 4 USANDO O INTERPRETADOR 19
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero
>>> print "Esta ´ uma linha extremamente
e
... longa que foi dividida."
Esta ´ uma linha extremamente longa que foi dividida.
e
>>>
20. 4 USANDO O INTERPRETADOR 20
Aten¸˜o!
ca
• Atribui¸ao: =;
c˜
• Igualdade: ==.
(inspirado em C)
21. 4 USANDO O INTERPRETADOR 21
>>> a = 10
>>> a
10
>>> a += 1
>>> a
11
>>> b = c = 0
>>> a,b = b,a
>>> a
0
>>> b
11
>>> c
0
22. 4 USANDO O INTERPRETADOR 22
>>> x = 15
>>> x
15
>>> x = 3.1415
>>> x
3.1415000000000002
Lembre-se: Tipagem dinˆmica!
a
23. 4 USANDO O INTERPRETADOR 23
>>> print "Ol´, mundo!"
a
Ol´, mundo!
a
>>> x = 15
>>> print x+1,x-1,2*x,x/2
16 14 30 7
>>> print "x=%d"%x
x=15
>>> y = 1.5
>>> print "x=%dny=%4.2f"%(x,y)
x=15
y=1.50
24. 4 USANDO O INTERPRETADOR 24
>>> z = "x=%dny=%4.2f"%(x,y)
>>> print z
x=15
y=1.50
>>> print "x=";print x
x=
15
>>> print "x=",;print x
x= 15
25. 4 USANDO O INTERPRETADOR 25
>>> if 1: print "verdadeiro"
...
verdadeiro
>>> if 0: print "verdadeiro"
...
>>>
Observa¸˜es:
co
• Valores-verdade: 0 e 1;
• ... ´ o prompt secund´rio.
e a
26. 4 USANDO O INTERPRETADOR 26
>>> if x<10:
... print x,
... print "menor"
... else:
... print x,
... print "maior"
...
15 maior
>>>
Observa¸˜es:
co
• Observe o prompt secund´rio ao final da estrutura;
a
• N˜o misturar espa¸os e tabula¸oes em um mesmo
a c c˜
bloco (erro!).
28. 4 USANDO O INTERPRETADOR 28
Lista encadeada:
>>> x = [1,2,3]
>>> x
[1,2,3]
>>> x[0] = 10
>>> x
[10,2,3]
>>> x+[4,5]
[10,2,3,4,5]
>>> x
[10,2,3]
>>> x.append(1000)
[10,2,3,1000]
29. 4 USANDO O INTERPRETADOR 29
>>> x
[10,2,3,1000]
>>>
30. 4 USANDO O INTERPRETADOR 30
String:
>>> x = "Gr^mio FBPA"
e
>>> y = " - o maior de todos"
>>> print x+y
Gr^mio FBPA - o maior de todos
e
Fun¸˜o:
ca
>>> x = float
>>> x
<built-in function float>
>>> x(2)
2.0
31. 4 USANDO O INTERPRETADOR 31
Binding: amarra¸ao entre nomes e valores em um
c˜
namespace.
Sempre que ocorre uma atribui¸˜o, ocorre uma
ca
amarra¸ao entre vari´vel e valor.
c˜ a
>>> a = a+1
A ocorrˆncia de a a esquerda da atribui¸ao ´ uma
e c˜ e
referˆncia ao objeto (L-value). Observe que tudo em
e
Python s˜o objetos, inclusive n´meros. A ocorrˆncia de a
a u e
a direita da atribui¸˜o (R-value) deve ser de-referenciada.
ca
32. 4 USANDO O INTERPRETADOR 32
Valor
15
X
Namespace
“Tipo do valor e n˜o tipo da vari´vel (nome)”.
a a
33. 4 USANDO O INTERPRETADOR 33
>>> x = 3
>>> y = 3
>>> print x==y # sim, pois tem o mesmo valor
1
>>> print x is y # sim, pois n´meros iguais sempre s~o o mesmo objeto
u a
1
>>> x = [1,2]
>>> y = [1,2]
>>> print x==y # sim, pois s~o iguais
a
1
>>> print x is y # n~o, pois s~o objetos (estruturas) diferentes
a a
0
>>> x = y = [1,2]
>>> print x==y # sim, pois s~o iguais
a
1
>>> print x is y # sim, pois s~o o mesmo objeto (mesma estrutura)
a
1
34. 4 USANDO O INTERPRETADOR 34
>>> x[0] = 10
>>> print x
[10,2]
>>> print y # [10,2] , pois s~o o mesmo objeto
a
[10,2]
>>> x = y = 3
>>> x = 10
>>> print x
10
>>> print y # 3 (n~o muda pois ´ outro objeto - n~o estruturado)
a e a
3
35. 4 USANDO O INTERPRETADOR 35
4.2 Usando o Interpretador - Modo Programado
4.2.1 Exemplo: Programa Ol´, mundo
a
$ vi teste.py
<i>
#!/usr/bin/python
print "Ol´, mundo!"
a
<esc>
:wq
$ python teste.py
Ol´, mundo!
a
$ chmod a+x teste.py
$ ./teste.py
Ol´, mundo!
a
$
36. 4 USANDO O INTERPRETADOR 36
4.2.2 Editando os Programas
´
vi E encontrado em qualquer sistema Unix; reconhece programas
Python e fornece alguma ajuda atrav´s de cores nos comandos;
e
38. 4 USANDO O INTERPRETADOR 38
emacs Editor encontrado em qualquer instala¸˜o Linux; reconhece
ca
programas Python e permite executar o programa dentro do
pr´prio editor.
o
43. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 43
5.3 Strings
>>> print ’ol´’
a
ol´a
>>> print "’Machado de Assis’ ´ o nome de um grande escritor"
e
’Machado de Assis’ ´ o nome de um grande escritor
e
>>> print ’"´rico Ver´ssimo" ´ o nome de um grande escritor’
E ı e
"´rico Ver´ssimo" ´ o nome de um grande escritor
E ı e
>>> print "Eis uma aspa: "."
Eis uma aspa: ".
>>> frase = "Esta ´ a primeira linha.nE esta ´ a segunda!"
e e
>>> print frase
Esta ´ a primeira linha.
e
E esta ´ a segunda!
e
>>>
44. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 44
Caracteres de escape:
Escape Significado
" aspas
n nova linha
<XXX> ASCII caracter octal
x<XXX> ASCII caracter hexadecimal
u<XXXX> Unicode
45. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 45
Para n˜o considerar os caracteres de escape use “r” antes da string:
a
>>> print "PrimeironSegundo"
Primeiro
Segundo
>>> print r"PrimeironSegundo"
PrimeironSegundo
Suporte ao padr˜o Unicode:
a
>>> print u"Ol´, mundo!"
a
Ol´, mundo!
a
46. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 46
Algumas opera¸oes sobre strings:
c˜
>>> print "Ol´, "+"mundo" # concatena¸~o
a ca
Ol´, mundo
a
>>> print "Python"*2 # repeti¸~o
ca
PythonPython
>>> print "Python"[0] # indexa¸~o
ca
P
>>> print "Python"[-2] # indexa¸~o para tr´s
ca a
o
>>> print "Python"[1:4] # particionar
yth
47. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 47
5.4 Operadores
• Operadores aritm´ticos:
e
Operador Descri¸ao
c˜
+ adi¸ao
c˜
- subtra¸˜o
ca
* multiplica¸ao
c˜
/ divis˜o
a
% resto da divis˜o
a
** exponencia¸ao
c˜
x = x+y pode ser substituido por x += y. Isto
funciona para todos os operadores aritm´ticos.
e
48. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 48
• Operadores l´gicos:
o
Operador Descri¸ao
c˜
and e l´gico
o
or ou l´gico
o
not nega¸ao
c˜
S˜o considerados valores falsos em Python: None, 0,
a
0.0, () ou [] (seq¨ˆncia vazia) e {} (dicion´rio
ue a
vazio). Todo o resto ´ considerado verdadeiro.
e
49. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 49
• Compara¸˜es:
co
Operador Descri¸ao
c˜
> maior
< menor
== igual
>= maior ou igual
<= menor ou igual
<> ou != diferente
is mesmo objeto
in est´ contido
a
50. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 50
>>> if ’a’ in [’a’,’b’,’c’]:
... print "contido"
...
contido
51. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 51
• Operadores de bits:
Operador Descri¸ao
c˜
| ou
^ ou exclusivo
& e
<< desloca para a esquerda
>> desloca para a direita
~ nega¸ao
c˜
53. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 53
5.5 Sequˆncias e Dicion´rios
e a
• Seq¨ˆncias: strings, tuplas e listas;
ue
Exemplos:
– Tupla: (1,2,3);
Observa¸˜o: () ´ a tupla vazia e (1,) ´ uma
ca e e
tupla com um elemento.
– Lista: [1,2,3];
Observa¸˜o: [] ´ a lista vazia.
ca e
54. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 54
Opera¸˜es com seq¨ˆncias:
co ue
Operador Descri¸˜o
ca
x in s pertinˆncia
e
x not in s n˜o pertinˆncia
a e
s1 + s2 concatena¸ao
c˜
s*n s concatenado n vezes
s[i] indexa¸˜o
ca
s[i:j] particionar
len(s) tamanho da seq¨ˆncia
ue
min(s) e max(s) menor e maior valor
56. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 56
No particionamento os valores default s˜o o primeiro
a
elemento e o ultimo respectivamente, de forma que
´
a[:] ´ uma parti¸˜o idˆntica a lista original (foi feita
e ca e
apenas uma c´pia).
o
>>> a = b = [1,2,3]
>>> c = a[:]
>>> a[0] = 15
>>> a
[15,2,3]
>>> b
[15,2,3]
>>> c
[1,2,3]
57. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 57
Opera¸˜es com listas:
co
Operador Descri¸˜o
ca
s[i]=x e s1[i:j]=s2 substitui¸ao
c˜
del s[i:j] remove elementos
s.append(x) adiciona elemento
s1.extend(s2) adiciona lista
s.count(x) conta n´mero de ocorrˆncias
u e
s.index(x) menor ´
ındice de x
58. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 58
Opera¸˜es com listas (continua¸˜o)
co ca
s.insert(i,x) insere na posi¸˜o i
ca
s.pop(i) ou s.pop() retira elemento (default=−1)
s.remove(x) remove elemento x
s.reverse() reverte a lista
s.sort() ordena lista
59. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 59
Usando listas como pilhas (´ltimo a entrar ´ o
u e
primeiro a sair):
>>> pilha = [1,2,3]
>>> pilha.append(4)
>>> pilha
[1,2,3,4]
>>> pilha.pop()
4
>>> pilha.pop()
3
>>> pilha
[1,2]
60. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 60
Usando listas como filas (o primeiro a entrar ´ o
e
primeiro a sair):
>>> fila = [1,2,3]
>>> fila.append(4)
>>> fila
[1,2,3,4]
>>> fila.pop(0)
1
>>> fila.pop(0)
2
>>> fila
[3,4]
61. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 61
Implementando CAR e CDR:
>>> s=[1,2,3]
>>> s[0] # CAR
1
>>> s[1:] # CDR
[2,3]
62. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 62
• Dicion´rios: S˜o conjuntos de pares chave-valor;
a a
Exemplos:
>>> x={’Carlos’ : ’15-11-1962’,
’Fantomas’ : ’15-11-1960’}
>>> x[’Carlos’]
’15-11-1962’
63. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 63
Opera¸˜es com dicion´rios:
co a
len(d) tamanho do dicion´rio
a
d[k] valor da chave k
d[k]=x atribui¸ao
c˜
del d[k] remove par chave-valor
d.clear() apaga todos os elementos
d.copy() retorna c´pia do dicion´rio
o a
d.has_key(k) verdadeiro se a chave existe
d.items() retorna lista de todos os elementos
64. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 64
Opera¸˜es com dicion´rios (continua¸ao)
co a c˜
d.keys() lista de todas as chaves
d1.update(d2) atualiza todas as chaves
d.values() lista de todos os valores
66. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 66
5.6 co ´
Algumas Fun¸˜es Uteis
abs(n) Valor absoluto;
apply(fun¸˜o,args) Chama uma fun¸˜o com seus
ca ca
argumentos;
Exemplo:
>>> def soma(x,y):
... return x+y
...
>>> apply(soma,[3,4])
7
complex(r,i) Cria um n´mero complexo;
u
67. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 67
eval(e) Avalia uma express˜o;
a
Exemplo:
>>> eval("10+5")
15
float(x) Converte string ou inteiro em ponto flutuante;
int(x) Converte para inteiro;
len(s) Retorna o tamanho de um objeto;
68. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 68
list(s) Retorna uma lista contendo os elementos de uma
seq¨ˆncia;
ue
Exemplo:
>>> list("abc")
[’a’,’b’,’c’]
>>> list((1,2,3))
[1,2,3]
long(x) Converte para inteiro longo;
pow(x,y) Calcula xy ;
69. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 69
range Retorna uma lista contendo uma seq¨ˆncia de
ue
n´meros;
u
Exemplo:
>>> range(1,6)
[1,2,3,4,5]
>>> range(0,4)
[0,1,2,3]
>>> range(2,11,2)
[2,4,6,8,10]
>>> range(10,5,-1)
[10,9,8,7,6]
70. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 70
raw input(s) Leitura da entrada padr˜o (n˜o formata);
a a
Exemplo:
>>> x = raw_input("x=")
x=15
>>> print x
15
>>> y = raw_input()
2003
>>> print y
2003
71. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 71
str(x) Converte para string;
tuple(s) Converte uma seq¨ˆncia para uma tupla;
ue
Exemplo:
>>> tuple("abc")
(’a’,’b’,’c’)
72. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 72
5.7 Estruturas de Controle
5.7.1 if
if x>0: print "maior que zero"
73. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 73
if a>b:
print a
else:
print b
Observe endenta¸ao (com brancos ou tabula¸˜es, mas
c˜ co
sempre coerente).
74. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 74
Substitui o case/switch.
if x<0:
print "negativo"
elif x==0:
print "zero"
else:
print "positivo"
Permite quantos elif forem necess´rios.
a
75. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 75
5.7.2 while
Exemplo (fatorial):
n,fat = 5,1
while n>1:
fat = n*fat
n -= 1
print fat
Exemplo (Fibonacci):
a,b = 0,1
while b<15:
print b
a,b = b,a+b
76. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 76
5.7.3 for
>>> for i in [1,2,3,4,5]:
... print i
...
1
2
3
4
5
>>>
77. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 77
>>> for i in range(1,6):
... print i
...
1
2
3
4
5
>>>
78. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 78
>>> for i in [’Ticiano’,’Jo~o Vitor’,’Luana’]:
a
... print i
...
Ticiano
Jo~o Vitor
a
Luana
79. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 79
Muitas vezes ´ necess´rio modificar a lista que est´ sendo
e a a
usada no la¸o for, o que ´ perigoso pois pode fazer o la¸o
c e c
perder-se. Nestes casos usa-se uma c´pia obtida por
o
particionamento.
Exemplo (apagar todos os elementos da lista com
tamanho maior que 10):
>>> s = [’Carlos Campani’,’Marcia’,’Luana’]
>>> for i in s[:]:
... if len(i)>10:
... s.remove(i)
...
>>> print s
[’Marcia’,’Luana’]
80. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 80
Exemplo (sele¸ao direta):
c˜
for i in range(0,len(v)):
ind=v[i:].index(min(v[i:]))
v[i],v[ind+i]=v[ind+i],v[i]
81. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 81
Usando lista para construir uma matriz 3 × 3:
>>> m = []
>>> for ind in range(0,9):
... m.append(ind*2)
...
>>> m
[0, 2, 4, 6, 8, 10, 12, 14, 16]
>>> i,j = 2,3
>>> m[(i-1)*3+j-1] = 7 # matriz[2,3] = 7
>>> m
[0, 2, 4, 6, 8, 7, 12, 14, 16]
82. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 82
5.7.4 break
Interrompe o la¸o mais interior.
c
Exemplo:
achou = 0
for i in s:
if i == x:
achou = 1
break
83. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 83
5.7.5 continue
Reinicia o la¸o.
c
Exemplo:
for i in s[:]:
if len(i) <= 10:
continue
else:
s.remove(i)
84. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 84
5.7.6 else
O else de um la¸o ´ executado quando o la¸o termina
c e c
normalmente (n˜o pela ocorrˆncia de um break).
a e
5.7.7 pass
while 1: # espera por Control-C
pass
85. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 85
5.8 Tratamento de Excess˜es
o
try: trata erros de execu¸ao.
c˜
try:
bloco
except:
bloco
try:
bloco
except erro:
bloco
Erros: ZeroDivisionError, NameError, TypeError, etc.
89. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 89
def fat(x):
if x:
return x*fat(x-1)
else:
return 1
Observe a utilidade do valor-verdade falso poder ser 0.
90. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 90
def count(s): # retorna tamanho da seq¨encia
u^
if s:
return count(s[1:])+1
else:
return 0
Observe a utilidade do valor-verdade falso poder ser [],
() ou "": podemos usar esta fun¸ao com lista, tupla ou
c˜
string.
91. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 91
Em Python n˜o existem procedimentos, s´ fun¸oes. Se a
a o c˜
fun¸ao n˜o retorna nada n˜o ´ necess´rio void.
c˜ a a e a
def ola():
print "Ol´, mundo"
a
>>> ola()
Ol´, mundo
a
92. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 92
Para declarar uma vari´vel como global use a declara¸˜o
a ca
global.
Exemplo:
def teste():
global x
x = 15
93. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 93
Podemos definir valores default para os argumentos de
uma fun¸ao:
c˜
>>> def teste(x,y=10,z=’Python’):
... print x,y,z
...
>>> teste(15)
15 10 Python
>>> teste(15,15,’Monty Python’)
15 15 Monty Python
>>> teste(1,’A Vida de Brian’,’Monty Python’)
1 A Vida de Brian Monty Python
94. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 94
Valores default s˜o avaliados dentro do escopo de
a
defini¸ao e n˜o dinamicamente:
c˜ a
>>> i = 15
>>> def teste(a=i):
... print a
...
>>> i = 10
>>> teste()
15
95. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 95
Podemos definir fun¸˜es com um n´mero arbitr´rio de
co u a
argumentos (argumentos excedentes ser˜o transformados
a
em uma tupla):
def fprintf(f,formato,*args):
f.write(formato % args)
96. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 96
Passagem de Parˆmetros:
a
´
• E o casamento entre parˆmetros reais e parˆmetros
a a
formais;
• Tipos de Passagem de Parˆmetros:
a
– Tipo Entrada. Ex: PASCAL (Passagem por Valor
– padr˜o);
a
– Tipo Entrada-Sa´
ıda. Ex: PASCAL (Passagem por
Referˆncia – VAR);
e
– Tipo Sa´ (raro). Ex: Passagem por Resultado;
ıda
– Em Python todos os argumentos s˜o passados por
a
referˆncia a objeto (c´pia da referˆncia).
e o e
97. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 97
Para declarar fun¸˜es anˆnimas, Python usa nota¸˜o
co o ca
lambda:
>>> f = lambda x,y : x+y
>>> print f(10,15)
25
98. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 98
Para documentar as fun¸˜es use strings de documenta¸˜o.
co ca
def ola():
" Esta fun¸ao ´ um exemplo "
c~ e
pass
99. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 99
5.10 Programa¸˜o Funcional
ca
Listas+CAR+CDR+Fun¸oes Anˆnimas=Programa¸ao
c˜ o c˜
Funcional
100. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 100
5.11 Manipula¸˜o de Arquivos
ca
• Abrir arquivo com f = open(nome,modo) (modo
pode ser “r”, “w” ou “r+”; f ´ um descritor);
e
• Ler arquivo com f.read();
• Escrever no arquivo com f.write(string);
• Flush: f.flush();
• Fechar arquivo com f.close().
101. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 101
Exemplo:
>>> f = open("teste.txt","r")
>>> x = f.read()
>>> f.close()
102. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 102
5.12 Alguns M´dulos do Python
o
• Extendem as capacidades do interpretador;
• Organizam o namespace;
• Podemos definir novos m´dulos em C ou Python, ou
o
importar m´dulos feitos por outros.
o
103. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 103
sys Acesso `s fun¸˜es do sistema;
a co
Exemplo:
#!/usr/bin/python
import sys
print sys.argv
$ ./teste.py a b c
[’teste.py’,’a’,’b’,’c’]
104. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 104
pickle Convers˜o de objetos em stream bytes (permite
a
salvar em arquivo qualquer objeto Python);
>>> import pickle
>>> f = open("teste.pick","w")
>>> pickle.dump(("ola",[1,2,3]),f)
>>> f.close()
>>> f = open("teste.pick","r")
>>> print pickle.load(f)
(’ola’,[1,2,3])
>>> f.close()
>>>
106. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 106
re Trata express˜es regulares;
o
math Fun¸˜es matem´ticas;
co a
>>> import math
>>> print math.sin(.5)
0.479425538604
random Gera¸˜o de n´meros aleat´rios;
ca u o
Exemplo:
>>> import random
>>> print random.random()
0.466429115742
107. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 107
calendar Calend´rio perp´tuo;
a e
Exemplo:
>>> import calendar
>>> print calendar.month(2003,2)
February 2003
Mo Tu We Th Fr Sa Su
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28
108. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 108
os Relacionado ao sistema operacional;
Exemplo:
>>> import os
>>> os.system("ls -l")
total 3
drwxrwxr-x 2 carlos carlos 4096 Aug 25 20:39 Mail
drwxrwxr-x 2 carlos carlos 4096 Feb 17 11:56 docs
drwxrwxr-x 2 carlos carlos 4096 Feb 17 21:46 tmp
0
>>>
109. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 109
os.path Trata caminhos de diret´rios;
o
Exemplo:
>>> import os.path
>>> print os.path.abspath(".")
/home/carlos
Tkinter Acesso ao Tk;
signal Intercepta¸ao de eventos ass´
c˜ ıncronos;
sockets Interface de rede;
thread Cria¸˜o de threads;
ca
110. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 110
gzip Compress˜o e descompress˜o gzip;
a a
readline GNU readline;
zipfile Manuseio de arquivos zip.
111. 5 ¸˜ ´
PROGRAMACAO BASICA PYTHON 111
5.13 Pydoc
Completa documenta¸ao dos m´dulos do Python ao
c˜ o
estilo das man pages do Unix.
$ pydoc sys
112. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 112
6 Programa¸˜o Orientada a
ca
Objetos
6.1 Conceitos B´sicos
a
• A POO surgiu na ´rea de simula¸ao de sistemas e
a c˜
interfaces gr´ficas;
a
• Simula e Smalltalk;
• Facilita a programa¸˜o ao fornecer um mecanismo de
ca
abstra¸˜o de dados que estimula o reuso de c´digo e
ca o
disciplina os programadores a usar de forma correta o
c´digo que ser´ reusado.
o a
113. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 113
Objeto Uma unidade contendo dados e m´todos para
e
manipular estes dados;
Classe Um molde para cria¸˜o de objetos;
ca
Encapsulamento Os dados e m´todos que manipulam
e
estes dados est˜o definidos dentro de uma unidade de
a
c´digo que esconde os detalhes de implementa¸ao
o c˜
(abstra¸˜o), permitindo que o programador acesse o
ca
c´digo atrav´s de uma interface p´blica (ao contr´rio
o e u a
da implementa¸˜o que ´ privada);
ca e
Heran¸a Permite o reuso de c´digo atrav´s de um
c o e
mecanismo de classes e subclasses que s˜o herdadas
a
das primeiras, criando uma hierarquia;
114. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 114
Mensagens As chamadas aos m´todos s˜o entendidas
e a
como envio de mensagens para os objetos (toda a
computa¸˜o de um programa ´ entendida como uma
ca e
seq¨ˆncia de mensagens enviadas de objeto para
ue
objeto);
Polimorfismo Cada operador, entendido como uma
mensagem enviada a seus operandos reage segundo o
contexto (o objeto que est´ sendo usado);
a
Instancia¸˜o Criar um objeto a partir de uma classe.
ca
115. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 115
6.2 Programa¸˜o Orientada a Objetos em Python
ca
• Definindo classes em Python
Sem heran¸a:
c
class nome:
bloco
Heran¸a simples:
c
class nome(classe-pai):
bloco
Heran¸a m´ ltipla (quando existe mais de uma classe-pai):
c u
class nome(classe-pai-1,classe-pai-2,...):
bloco
• Definindo m´todos da classe: usa-se def.
e
• Em Python, podemos documentar as classes usando strings de
documenta¸˜o.
ca
116. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 116
• Exemplo:
class atomo:
def __init__(self,numat,x,y,z):
self.numat = numat
self.pos = (x,y,z)
def simbolo(self):
return TabSimbAt[self.numat]
def __repr__(self):
return "NumAtom=%d X=%d Y=%d Z=%d"%(self.numat,
self.pos[0],self.pos[1],self.pos[2])
• Observa¸oes:
c˜
– self ´ o pr´prio objeto;
e o
– init ´ o contrutor da classe;
e
– repr ´ a rotina de impress˜o.
e a
118. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 118
• Polimorfismo:
>>> class A:
... def get(self):
... print "Ol´, mundo"
a
...
>>> class B:
... def get(self):
... print "Python"
...
>>> a = A()
>>> b = B()
>>> a.get()
Ol´, mundo
a
>>> b.get()
Python
a e b s˜o objetos diferentes e a mensagem .get() reage de forma diferente
a
em cada um.
119. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 119
• Observa¸ao: tudo que tiver
c˜ na frente ´ privado;
e
class esconde:
def __init__(self,x,y):
self.__x = x # x ´ privado
e
self.y = y # y ´ p´blico
e u
def impx(self):
print self.__x
>>> e = esconde(10,15)
>>> print e.y
15
>>> e.impx()
10
• M´todo privado:
e
class teste:
def __secreto(self): # m´todo privado
e
...
120. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 120
• Definindo a classe molecula:
class molecula:
def __init__(self,nome="desconhecida"):
self.nome = nome
self.listadeatomos = []
def adicatomo(self,atomo):
self.listadeatomos.append(atomo)
def __repr__(self):
s = ""
for a in self.listadeatomos:
s = s+"%sn"%a
return "Nome=%snLista de atomos=n%s"%(self.nome,s)
• Instanciando H2 :
>>> hidro1 = atomo(1,0,0,0)
>>> hidro2 = atomo(1,1,0,0)
>>> h2 = molecula("Mol´cula de Hidrog^nio (H2)")
e e
>>> h2.adicatomo(hidro1)
>>> h2.adicatomo(hidro2)
121. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 121
• Herdando uma classe:
class substancia(molecula):
def __init__(self,nome,propriedades):
molecula.__init__(self,nome)
self.propriedades = propriedades
def adicatomo(self,atomo):
molecula.adicatomo(self,atomo)
def __repr__(self):
return "Molecula %snPropriedades=%s"%(self.nome,
self.propriedades)
• Observa¸oes:
c˜
– class substancia(molecula): indica que substancia est´ sendo herdada
a
de molecula (molecula ´ a superclasse, substancia ´ a subclasse);
e e
– molecula. init (self,nome) significa a chamada do m´todo construtor
e
pai;
– J´
a repr foi totalmente reescrito.
122. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 122
• Atributo de classe e de instˆncia:
a
class teste:
x = 10 # atributo global (de classe)
def __init__(self,n):
self.y = n # atributo de inst^ncia
a
...
123. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 123
• Outro exemplo de heran¸a:
c
class Alimento:
def __init__(self,nome,quantidade):
self.nome=nome
self.quantidade=quantidade
def __repr__(self):
return "Nome=%snQuantidade=%s"%(self.nome,
self.quantidade)
class Leite(Alimento):
def __init__(self,nome,quantidade,lipideos):
Alimento.__init__(self,nome,quantidade)
self.lipideos=lipideos
class Sucrilhos(Alimento):
def __init__(self,nome,quantidade):
Alimento.__init__(self,nome,quantidade)
self.vitaminas=[]
def adicvitamina(self,vitamina,quantidade):
self.vitaminas.append((vitamina,quantidade))
124. 6 ¸˜
PROGRAMACAO ORIENTADA A OBJETOS 124
Alimento
N
s NNN
ssss NNN
ysssss NNN
N&
Leite Sucrilhos
125. 7 PYTHON AVANCADO
¸ 125
7 Python Avan¸ado
c
7.1 M´dulo Gnuplot - Programa¸˜o
o ca
Cient´
ıfica
• M´dulo para acessar o programa externo gnuplot;
o
• Home page: http://gnuplot-py.sourceforge.net.
130. 7 PYTHON AVANCADO
¸ 130
7.2 Numerical Python - Programa¸˜o
ca
Cient´
ıfica
• Inclui muitos recursos do Matlab, mas ao contr´rio
a
deste ´ software livre;
e
• Multiplataforma;
• Manipula¸˜o de matrizes e ´lgebra linear:
ca a
determinante, invers˜o de matriz, matriz transposta,
a
multiplica¸ao de matrizes, solu¸˜o de sistemas
c˜ ca
lineares, autovalores e autovetores, etc.
• Home page:
http://sourceforge.net/projects/numpy.
131. 7 PYTHON AVANCADO
¸ 131
Vetores, matrizes, shape e reshape:
>>> from Numeric import *
>>> from LinearAlgebra import *
>>> a = arrayrange(0,2*pi,0.1)
>>> print a
[0.,0.1,0.2, ... 6.2]
>>> sin(a)
[0., 0.09983342, ... -0.0830894]
>>> a = zero((3,3),Float)
>>> print a
[[0.,0.,0.],
[0.,0.,0.],
[0.,0.,0.]]
136. 7 PYTHON AVANCADO
¸ 136
Multiplica¸ao de matrizes:
c˜
>>> x = matrixmultiply(matrixmultiply(vet,dia),q1)
>>> print x
[[ -6.93618340e-17 1.00000000e-00]
[ 5.00000000e-01 5.00000000e-01]]
137. 7 PYTHON AVANCADO
¸ 137
7.3 Internacionaliza¸˜o
ca
• M´dulo gettext;
o
• Acesso ` API GNU-gettext;
a
• Permite que as mensagens do aplicativo sejam
escritas em diversas l´
ınguas, de forma que o usu´rio
a
possa escolher a l´
ıngua que deseja.
138. 7 PYTHON AVANCADO
¸ 138
7.4 Extendendo Python usando C e
C++
• Escrevendo m´dulos em C ou C++;
o
• Partes do programa C:
1. Defini¸ao das fun¸oes C;
c˜ c˜
2. Tabela de m´todos;
e
3. Fun¸˜o de inicializa¸˜o.
ca ca
• Todos os objetos Python tem py_ na frente;
• PyArg Parse traduz de Python para C;
• Py BuildValue traduz de C para Python.
148. 7 PYTHON AVANCADO
¸ 148
7.5 Comunica¸˜o com Programas em
ca
Outras Linguagens (C, FORTRAN,
LISP, PROLOG, etc.)
• Todo programa pode comunicar-se com Python pelo
dispositivo de entrada/sa´ padr˜o;
ıda a
• Usa-se popen ou popen2 para abrir um pipe com o
programa.
150. 7 PYTHON AVANCADO
¸ 150
>>> import os
>>> f = os.popen("./teste.o","w")
>>> f.write("15")
>>> f.flush()
>>> f.close()
151. 7 PYTHON AVANCADO
¸ 151
7.6 Profiling
Permite determinar que partes do programa s˜o
a
“gargalos” de tempo e devem ser convertidas para C,
aumentando o desempenho do programa de forma mais
eficiente.
152. 7 PYTHON AVANCADO
¸ 152
import random,profile
def escolhe():
global nums
nums = []
for i in range(1,51):
nums.append(int(100*random.random()+1))
def fat(n):
if n<2:
return 1.0
else:
return float(n*fat(n-1))
def main():
global nums
escolhe()
for i in range(0,50):
print nums[i],fat(nums[i])
profile.run(’main()’)
154. 7 PYTHON AVANCADO
¸ 154
7.7 Python e OpenGL
• OpenGL permite criar gr´ficos 3D (adiciona depth `s
a a
coordenadas de um ponto) e efetuar transforma¸oes
c˜
de imagem (rota¸ao, transla¸ao, etc.) - home pages:
c˜ c˜
http://www.opengl.org e
http://pyopengl.sourceforge.net;
• Placas gr´ficas aceleram as transforma¸˜es;
a co
• Criado pela Silicon Graphics (como padr˜o aberto);
a
Amado pelos produtores de jogos: Quake, Diablo,
etc.
• Implementa¸ao livre: Mesa3D ( home page:
c˜
http://www.mesa3d.org).
155. 7 PYTHON AVANCADO
¸ 155
Fam´ OpenGL:
ılia
GL Biblioteca b´sica (comandos primitivos);
a
GLU Utilit´rios e comandos mais complexos (exemplo:
a
desenhar cilindro);
GLX GL para X-Window;
GLUT Caixa de ferramentas com recursos mais
sofisticados (exemplo: desenhar esfera);
156. 7 PYTHON AVANCADO
¸ 156
7.7.1 Exemplo: Programa Esferas
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
166. 7 PYTHON AVANCADO
¸ 166
7.10 Python como Linguagem de Cola
(Glue Language)
• Python consegue comunicar-se com outras
linguagens, acessa gnuplot, OpenGL, MySQL etc.
• Isto permite imaginar Python como uma “cola” entre
estes recursos;
• Podemos usar Python para acessar aquele pacote
gr´fico maravilhoso, que s´ funciona com C, em um
a o
programa FORTRAN, ou ent˜o desenhar uma
a
interface gr´fica usando Tk para um programa
a
PROLOG (que originalmente n˜o possui suporte
a
para Tk);
167. 7 PYTHON AVANCADO
¸ 167
• Um m´dulo que permite Python comunicar-se com
o
outro programa ´ chamado de wrapper ;
e
• Podemos usar o swig (http://www.swig.org) para
fazer wrappers.
168. 7 PYTHON AVANCADO
¸ 168
7.11 Scripts CGI
• Primeiro instalar o servidor Apache corretamente;
• Colocar os scripts no diret´rio cgi-bin criado na
o
instala¸˜o do servidor;
ca
• Dar previl´gio de execu¸ao para o script;
e c˜
• Dois tipos de forms: POST e GET.
169. 7 PYTHON AVANCADO
¸ 169
7.11.1 Exemplo: Ol´, mundo
a
#!/usr/bin/python
import cgi
print "Content-Type: text/html"
print
print "<TITLE>CGI teste</TITLE>"
print "<H1>Teste</H1>"
print "Ol´, mundo!"
a
170. 7 PYTHON AVANCADO
¸ 170
7.11.2 Exemplo: Formul´rio
a
<HTML>
<HEAD>
<TITLE>Teste</TITLE>
</HEAD>
<BODY>
<H1>Enquete</H1>
<P>
Sua prefer^ncia de compra:<P>
e
<FORM action="http://localhost/cgi-bin/testecgi2.py" method="POST">
<SELECT Name="Prefere">
<OPTION Value="0">Selecione um</OPTION>
<OPTION Value="1">Carro</OPTION>
<OPTION Value="2">Casa</OPTION>
</SELECT>
<P>
Sal´rio:<P>
a
<INPUT type="text" name="Valor" size="20">
</P>
176. 7 PYTHON AVANCADO
¸ 176
7.13 ´
Processamento de Audio -
Ecasound
Processamento de ´udio em Python/Linux.
a
http://www.eca.cx/ecasound/
177. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 177
8 Programa¸˜o Gr´fica usando
ca a
Tk
8.1 Introdu¸˜o ao Tk
ca
• Conjunto de widgets projetado por John K.
Ousterhout em 1987;
• Home page: http://www.tcl.tk.
• Tk = Tool kit (como uma biblioteca);
• Widget (“coisinha”) ´ um objeto de interface de
e
usu´rio gr´fica;
a a
178. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 178
• Originalmente projetado para ser usado com Tcl
(Toolkit Control Language);
• Tcl ´ muito limitado como linguagem;
e
• Pode ser usada tamb´m com Perl e Python;
e
• M´dulo Tkinter: interface Python-Tk - orientado a
o
objetos;
179. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 179
Como funcionam as chamadas do Tkinter?
Seu programa P ython
T kinter (P ython)
tkinter (C)
T k widgets (C e T cl)
T k (C)
Xlib
Problema: a necessidade de acessar Tcl.
180. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 180
8.2 Usando o Tkinter
• Tkinter ´ um wrapper para acessar Tk a partir de
e
Python;
• Um wrapper ´ como uma camada que faz a
e
comunica¸ao de duas outras.
c˜
Tk
Tkinter
Python
181. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 181
8.2.1 Alguns Widgets do Tk
Label Exibe texto n˜o formatado;
a
Button Bot˜o (pode-se associar o clique do mouse com
a
um “callback”);
Frame Container retangular usado para colocar uma
hierarquia de widgets filhos (n˜o aparece na tela);
a
Text Texto formatado edit´vel;
a
Listbox Sele¸˜o de alternativas;
ca
182. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 182
Canvas Exibe objetos gr´ficos (´ um container; pode ser
a e
usado para criar widgets personalizados);
Checkbox Seleciona um valor booleano;
Entry Campo de preenchimento de texto;
Menu Permite criar os menus de um aplicativo;
Scrollbar Barra de rolagem.
183. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 183
8.2.2 Exemplo: Ol´, mundo
a
from Tkinter import *
root = Tk()
lb = Label(root,text=Ol´, mundo!)
a
lb.pack()
root.mainloop()
184. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 184
from Tkinter import *
root = Tk()
lb = Label(root,text=Ol´, mundo!)
a
lb.pack()
root.mainloop()
Descri¸˜o:
ca
root = Tk() root ´ o handler do widget ra´ (representa a aplica¸˜o); Tk() ´ o
e ız ca e
construtor da aplica¸˜o;
ca
Label observe que o construtor Label recebe o handler do root (widget
mestre); Label ´ o widget escravo;
e
text=texto Op¸ao indicando o texto a ser exibido dentro do widget;
c˜
lb Armazena o handler do widget;
.pack() M´todo para “empacotar” um widget (exibe na tela);
e
´
root.mainloop() E o loop do aplicativo (trata todos os eventos).
186. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 186
8.2.3 Exemplo: Ol´, mundo 2
a
from Tkinter import *
root = Tk()
Label(root,text=Ol´, mundo!).pack()
a
root.mainloop()
Observe que n˜o ´ necess´rio armazenar o handler.
a e a
187. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 187
8.2.4 Widget Label: Algumas Op¸˜es
co
O construtor Label, assim como todos os outros m´todos
e
construtores de widgets, recebe as op¸oes na forma
c˜
chave = valor
188. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 188
anchor Indica onde o texto ser´ posicionado dentro do
a
widget; Default ´ CENTER; Outros valores s˜o N, E,
e a
S, W, NE, NW, etc.
background (bg) Cor do fundo;
borderwidth (bd) Espessura da borda;
font Fonte usado no texto;
foreground (fg) Cor do texto exibido dentro do widget;
height Altura do widget em linhas de texto;
justify Alinhamento do texto: LEFT, CENTER (o
default), RIGHT;
189. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 189
padx Espa¸o extra a direita e a esquerda do widget (em
c
pixels);
pady Espa¸o extra acima e abaixo;
c
relief Aparˆncia do widget: FLAT (o default), RIDGE,
e
GROOVE, RAISED, e SUNKEN;
text O texto a ser exibido (nova linha com n);
width Largura do widget.
190. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 190
8.2.5 Empacotamento
“Empacotar” significa colocar um widget em uma
aplica¸ao (determinar sua posi¸˜o em rela¸˜o aos outros
c˜ ca ca
widgets).
191. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 191
1. Usando-se .pack() - Cria o layout empacotando
widgets dentro de widgets de forma hier´rquica
a
(widgets mestre e escravo), tratando-os como blocos
retangulares;
Frame
Frame
Frame
192. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 192
Algumas op¸oes:
c˜
anchor Posiciona ao empacotar: N, S, W, E, NE, etc.
fill Preenche espa¸o dispon´
c ıvel: X, Y ou BOTH;
side Posiciona os widgets ao empacotar: LEFT (da
esquerda para a direita na ordem em que forem
empacotados), RIGHT, TOP, BOTTOM.
193. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 193
2. Usando-se .grid() - Permite criar layouts baseado em
uma grelha bidimensional (como uma tabela);
0 1
0
1
194. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 194
Algumas op¸oes:
c˜
column Indica a coluna da grelha em que ser´
a
posicionado o widget (come¸a em 0);
c
columnspan Caso se queira que o widget ocupe mais
de uma coluna (junta c´lulas);
e
row Indica a linha da grelha (come¸a em 0);
c
rowspan Junta linhas;
sticky Determina como o widget vai ocupar uma
c´lula da grelha: N, S, W, E, N+S (ocupa todo o
e
espa¸o horizontal), E+W (ocupa todo o espa¸o
c c
vertical), N+E+S+W (preenche todo o espa¸o c
dispon´ıvel).
195. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 195
3. Usando-se .place() - Permite posicionar
explicitamente o widget;
196. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 196
Cuidado! Os empacotadores podem ser usados juntos em
uma aplica¸ao, mas n˜o em um mesmo frame.
c˜ a
197. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 197
8.2.6 Binding e Callback (Handler)
• “Binding” ´ um mecanismo geral para associar uma
e
a¸˜o particular do usu´rio (evento) com um
ca a
comportamento definido espec´ ıfico da aplica¸˜o;
ca
• “Callback” ´ a chamada do handler;
e
• “Handler” ´ a fun¸ao/m´todo que responde ao
e c˜ e
evento.
198. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 198
8.2.7 M´todos Universais
e
• S˜o aqueles que existem para todos os widgets;
a
• Exemplos:
.bind() Define bindings;
.clipboard append() Insere na clipboard do Tk;
.clipboard clear() Limpa a clipboard do Tk;
.configure() ou .config() Configura o widget
depois de criado;
.destroy() Destr´i o widget;
o
199. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 199
.event add() Cria eventos virtuais;
.grab set() Captura todos os eventos da aplica¸˜o;
ca
.mainloop() Espera por eventos;
.quit() Abandona o “mainloop”.
200. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 200
8.2.8 Exemplo: Ol´, mundo 3
a
from Tkinter import *
root = Tk()
root.title(Teste)
lb = Label(root,text=Ol´, mundo!,width=20)
a
lb.pack()
root.mainloop()
Observa¸˜o: width ´ dado em unidades de texto.
ca e
202. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 202
8.2.9 Dimens˜es e Sistema de Coordenadas
o
• Especificar as dimens˜es em: c (cent´
o ımetros), i
(polegadas), m (milimetros), p (pontos de impress˜o);
a
• Se n˜o especifica a dimens˜o, o valor ´ tomado como
a a e
pixels;
• O sistema de coordenadas ´ relativo ao canto
e
superior esquerdo da janela, “x” refere-se a distˆncias
a
na horizontal e “y” refere-se a distˆncias na vertical.
a
203. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 203
8.2.10 Exemplo: Ol´, mundo 4
a
from Tkinter import *
root = Tk()
root.title(Teste)
b = Button(root,bg=blue,fg=yellow,text=Ol´, mundo!,
a
width=20,command=root.quit)
b.config(activebackground=yellow) # poderia ser feito na cria¸~o
ca
b.config(activeforeground=blue)
b.pack()
root.mainloop()
Observa¸˜es:
co
• widget “Button” permite criar bot˜es clic´veis no aplicativo;
o a
• “bg” ´ a cor de fundo e “fg” ´ a cor do texto;
e e
• “command” define uma resposta ao evento “clicar no bot˜o”;
a
• “.config” ´ o m´todo para configurar widgets.
e e
205. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 205
8.2.11 Widget Button
Principais op¸oes:
c˜
activebackground Cor de fundo quando o mouse est´
a
sobre o widget;
activeforeground Cor do texto quando o mouse est´
a
sobre o widget;
anchor Idˆntico a Label;
e
bd Espessura da borda;
command Resposta ao clique;
cursor Permite definir o cursor quando o mouse est´
a
sobre o widget;
206. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 206
justify Idˆntico ao widget Label;
e
padx idem;
pady idem;
relief idem;
text Texto que vai aparecer no bot˜o;
a
underline Indica a posi¸ao do caracter que ser´
c˜ a
sublinhado no texto do widget e servir´ de atalho do
a
bot˜o (come¸a com 0);
a c
width Largura do bot˜o.
a
207. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 207
8.2.12 Exemplo: Ol´, mundo 5
a
from Tkinter import *
def callback():
print (Ol´, mundo!)
a
root = Tk()
root.title(Teste)
frame = Frame(root)
frame.pack()
b = Button(frame,text=Fala vivente,command=callback)
b2 = Button(frame,text=Tchau...,command=root.quit)
b.pack(side=LEFT)
b2.pack(side=LEFT)
root.mainloop()
• widget “Frame” ´ um “container” (n˜o aparece na tela);
e a
• “command=callback” define um callback para o bot˜o;
a
• “.pack(side=LEFT)” - packing com posi¸˜o.
ca
209. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 209
8.2.13 Widget Frame
Algumas op¸oes:
c˜
background (bg) Cor de fundo do frame;
borderwidth Espessura da borda (default ´ 0);
e
height Altura do frame;
relief Idˆntico ao descrito em Label e Button;
e
width Largura do frame;
210. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 210
8.2.14 Exemplo: Ol´, mundo 6
a
from Tkinter import *
def callback(evento): # note o argumento evento do callback
print (Ol´, mundo! x=%d y=%d%(evento.x,evento.y))
a
root = Tk()
root.title(Teste)
frame = Frame(root)
frame.pack()
b = Button(frame,text=Clique duplo aqui)
b.bind(Double-Button-1,callback) # binding de eventos
b2 = Button(frame,text=Tchau...,command=root.quit)
b.pack(side=TOP) # observe que side=TOP
b2.pack(side=TOP,fill=X) # fill=X para ocupar todo o espa¸o
c
root.mainloop()
212. 8 ¸˜ ´
PROGRAMACAO GRAFICA USANDO TK 212
8.2.15 Mais Sobre Binding
• Alguns tipos de eventos:
Button O usu´rio pressionou um bot˜o com o
a a
mouse (exemplo: Button-1 ´ o bot˜o esquerdo
e a
do mouse);
Configure O usu´rio mudou o tamanho do widget
a
(por exemplo, arrastando a borda da janela);
Enter O mouse entrou na ´rea do widget;
a
Leave O mouse saiu da ´rea do widget;
a
Motion O usu´rio est´ arrastando o widget;
a a