Este documento apresenta uma introdução à programação em Python e ao toolkit Tk. Ele discute os objetivos do curso, as características da linguagem Python, a importância da teoria e da prática, e como usar o interpretador Python de forma interativa.
2 Copyright c 2005Carlos 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
ˆ 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
ˆ 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!).
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
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
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˜
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
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
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.
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() >>>
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
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.
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.]]
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.
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.
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()’)
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 *
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>
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).
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
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
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
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()
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
213.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 213 • Modificadores de evento: Alt O usu´rio pressionou junto Alt; a Control Pressionou junto Control; Double Dois eventos em seq¨ˆncia (exemplo: ue Double-Button-1);
214.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 214 • N´ ıveis de binding: – Binding de instˆncia - binding de um evento com a um widget espec´ ıfico; Exemplo: w.bind(Button-1,callback); – Binding de classe - binding de todos os widgets da classe; Exemplo: w.bind_class(Canvas,Double-Button-2, callback); – Binding da aplica¸˜o - binding de todos os widgets ca da aplica¸ao; c˜ Exemplo: w.bind_all(Button-2,callback);
215.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 215 • Algumas informa¸oes que podem ser passadas para o c˜ handler (callback) atrav´s do argumento evento: e .widget qual widget gerou o callback; .x coordenada x do evento em rela¸˜o ao widget; ca .y coordenada y do evento em rela¸ao ao widget; c˜
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 219 8.2.17 Exemplo: Ol´, mundo 8 a # usando heran¸a c from Tkinter import * class Aplic(Frame): def __init__(self,mestre): Frame.__init__(self,mestre) self.bot = Button(mestre,text=SAI,fg=red, command=mestre.quit) self.bot.pack(side=LEFT) self.ola = Button(mestre,text=Ol´,command=self.Ola) a self.ola.pack(side=LEFT) def Ola(self): print Ol´, mundo! a root = Tk() root.title(Teste) ap = Aplic(root) root.mainloop()
220.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 220 Observa¸˜es: co • No comando class Aplic(Frame), Frame indica a classe-pai; • O comando Frame.__init__(self,mestre), ´ a chamada do construtor de e Frame.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 229 8.2.19 Exemplo: Calend´rio a from Tkinter import * import time,calendar,tkFont,string root = Tk() root.title(Calend´rio) a frame = Frame(root) frame.pack() ent = Entry(frame) ent.bind(Return,callback) font = tkFont.Font(family=Computer,size=16) lb = Label(frame,width=25,height=10,bg=yellow,font=font, justify=left) data = time.localtime() ano = data[0] mes = data[1] s = calendar.month(ano,mes) lb.config(text=s) ent.pack(side=TOP,fill=X) lb.pack(side=TOP) root.mainloop()
230.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 230 def callback(evento): global ano,mes,ent,lb data = ent.get() if / in data: try: ind = data.index(/) mes = string.atoi(data[0:ind]) ano = string.atoi(data[ind+1:len(data)]) s = calendar.month(ano,mes) lb.config(text=s) ent.delete(0,END) except: ent.delete(0,END) else: try: mes = string.atoi(data) s = calendar.month(ano,mes) lb.config(text=s) ent.delete(0,END) except: ent.delete(0,END)
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 232 8.2.20 Widget Entry Algumas op¸oes: c˜ background (bg) Cor do fundo; borderwidth Espessura da borda; font O fonte que ser´ usado dentro do widget; a foreground Cor usada no texto; justify Controla a forma com que o texto ser´ alinhado: a LEFT (default), CENTER ou RIGHT; relief A aparˆncia do widget; e width Largura do widget (em caracteres de texto).
233.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 233 M´todos do widget: e .delete(primeiro, ultimo) Apaga a entrada (exemplo: ´ e.delete(0,END) apaga toda a entrada); .get() Obt´m a entrada (faz a leitura do widget); e .insert(´ ındice,string) Insere no widget.
234.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 234 8.2.21 Exemplo: Jogo da Velha from Tkinter import * final=0 jogaA=1 root=Tk() frame=Frame(root) frame.pack() root.title(Jogo da Velha) lb=Label(frame,text=Jogador A) lb.pack(side=TOP) canvas=Canvas(frame,bg=blue,height=150,width=150,cursor=circle, relief=GROOVE) canvas.pack(side=BOTTOM) desenha() canvas.bind(Button-1,clique) tab=[0,0,0,0,0,0,0,0,0] root.mainloop()
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 244 8.2.22 Widget Canvas Container para objetos gr´ficos (permite definir widgets a personalizados). Principais op¸oes: c˜ borderwidth Espessura da borda; background Cor de fundo; cursor Permite escolher o cursor que ser´ usado quando a o mouse est´ sobre o canvas; a height Altura do canvas (em pixels); width Largura do canvas (em pixels);
245.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 245 xscrollcommand Este atributo deve ser o m´todo .set e da barra de rolagem horizontal (se possuir barra de rolagem); yscrollcommand Este atributo deve ser o m´todo .set e da barra de rolagem vertical.
246.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 246 Principais objetos (m´todos para cria¸˜o): e ca .create arc() Desenha arcos; .create image() Importa uma imagem (geralmente GIF); .create line() Desenha linha; .create oval() Ovais/c´ ırculos, definido por um bbox (4 coordenadas); .create polygon() Pol´ ıgono definido por uma seq¨ˆncia ue de coordenadas de pontos que formam os v´rtices do e pol´ ıgono;
247.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 247 .create rectangle() Retˆngulo, definido por um bbox a (4 coordenadas); .create text() Permite colocar texto.
248.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 248 8.2.23 Exemplo: Gr´ficos em Pizza a from Tkinter import * root = Tk() root.title(Pizza) canvas = Canvas(root,height=200,width=320) canvas.pack() xy = 25,30,295,185 # note a tupla com supress~o dos par^nteses a e canvas.create_arc(xy,start=0,extent=250,fill=red) canvas.create_arc(xy,start=250,extent=70,fill=green) canvas.create_arc(xy,start=320,extent=40,fill=blue) root.mainloop()
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 253 Observa¸˜es: co • Atribui¸˜o de “tags” aos objetos; ca • Um tag pode nomear mais de um objeto e um objeto pode ter mais de um tag.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 258 8.2.27 Movimentando o Sol Usaremos after(tempo,callback) para gerar interrup¸oes de 100ms e c˜ canvas.move(tag,dx,dy) para mover o Sol. diremov = -1 conta = 0 root = Tk() ... root.after(100,callback) root.mainloop()
259.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 259 Callback: def callback(): global root,canvas,diremov,conta canvas.move(sol,0,diremov) conta += 1 if conta 50: conta = 0 diremov=-1*diremov root.after(100,callback)
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 262 8.2.29 Widget PhotoImage Alguns m´todos: e get(x,y) Obt´m um pixel; e put(dados) Escreve dados na imagem; write(filename,op¸oes) Salva imagem em arquivo; c˜ zoom(escala) Efetua zoom.
263.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 263 8.2.30 Definindo um Widget “Custom” • Exemplo: um novo bot˜o OK; a • Usar Canvas.
264.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 264 8.2.31 Exemplo: Usando Menus e Di´logos a from Tkinter import * def sobre(): win = Toplevel(bd=2) lb = Label(win,text=Teste do menu) lb.pack() root = Tk() menu = Menu(root) root.config(menu=menu) helpmenu = Menu(menu) menu.add_cascade(label=Ajuda,menu=helpmenu) helpmenu.add_command(label=Sobre...,command=sobre) root.mainloop()
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 266 8.2.32 Widget Menu Algumas op¸oes: c˜ background (bg) Cor de fundo; borderwidth (bd) Espessura da borda do menu; font Fonte usada no menu.
267.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 267 M´todos do widget: e .add cascade() Adiciona um novo elemento em cascata ao menu; .add command() Adiciona um comando ao menu; .delete() Apaga um elemento do menu.
268.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 268 8.2.33 Widget Toplevel ´ E uma janela independente de root (n˜o ´ empacotada). a e Algumas op¸oes: c˜ background Cor de fundo; height Altura da janela (em pixels); width Largura da janela (em pixels). Observa¸˜o: Janelas Toplevel (inclusive root) possuem o ca m´todo .title(). e
269.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 269 8.2.34 Definindo uma Janela Transiente e Usando grab set() • Problema 1: O usu´rio continua com acesso ` janela a a root; • Problema 2: O usu´rio pode minimizar a janela ou o a di´logo de forma independente; a • Solu¸˜o do problema 1: .grab set(); ca • Solu¸˜o do problema 2: Janela transiente. ca
270.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 270 8.2.35 Exemplo: Usando Menus e Di´logos 2 a from Tkinter import * def null(): pass def sobre(): global root win = Toplevel(bd=2) lb = Label(win,text=Teste do menu) lb.pack() win.transient(root) win.grab_set() root = Tk() menu = Menu(root) root.config(menu=menu) helpmenu = Menu(menu) menu.add_cascade(label=Ajuda,menu=helpmenu) helpmenu.add_command(label=Sobre...,command=sobre) root.mainloop()
271.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 271 8.2.36 Protocolos Quando ´ necess´rio interferir na comunica¸ao entre o e a c˜ aplicativo e o gerenciador de janelas. Exemplo: w.protocol(WM DELETE WINDOW,handler)
272.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 272 8.2.37 Esperando uma Janela • Usa-se o m´todo .wait window(janela) para e aguardar que um determinado widget seja destruido (entra em um la¸o de evento local); c • Serve para aguardar que uma janela desapare¸a da c tela.
273.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 273 8.2.38 Widget Listbox Para apresentar uma lista de alternativas. Sele¸ao 1 c˜ Sele¸ao 2 c˜ Sele¸ao 3 c˜ . . . Sele¸˜o n ca
274.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 274 lb = Listbox(root) M´todo .insert() insere no widget. e for i in [’1’,’2’,’3’]: lb.insert(END,i) Observa¸˜o: END significa inserir no final (na ultima ca ´ posi¸ao). c˜
275.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 275 Para consultar a sele¸ao do usu´rio: c˜ a itens = lb.curselection() que retorna uma lista com os ´ındices dos elementos selecionados (o usu´rio pode efetuar sele¸˜o m´ltipla). a ca u
276.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 276 Para apagar os elementos do Listbox use o m´todo e .delete(). Para apagar todos os elementos use: lb.delete(0,END)
277.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 277 8.2.39 Widget Scrollbar Permite criar uma barra de rolagem. sb = Scrollbar(frame) lb = Listbox(frame) lb[yscrollcommand] = sb.set sb[command] = lb.yview lb.pack(side=LEFT) sb.pack(side=LEFT,fill=Y)
278.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 278 8.2.40 Widget Checkbutton • Permite selecionar um valor booleano; • Usa uma vari´vel de controle para armazenar o a estado do bot˜o; a var = StringVar() cb = Checkbutton(frame,text=Mai´sculas, u variable=var,onvalue=S,offvalue=N, command=TrataBot)
279.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 279 8.2.41 Exemplo: Di´logo para Abrir/Salvar Arquivo a Aparˆncia do di´logo: e a
280.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 280 Uso da classe MyFileDialog: import MyFileDialog d = MyFileDialog.MyFileDialog(root,Abrir arquivo) filename = d.Get_Output()
281.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 281 M´dulos importados pela classe: o from Tkinter import * import os, os.path, string
282.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 282 Classe MyFileDialog e seu m´todo construtor: e class MyFileDialog: MyFileDialog class - creates a Toplevel window for the dialog def __init__(self,parent,title): self.output = top = Toplevel() top.title(title) top.transient(parent) parent.protocol(WM_DELETE_WINDOW,self.null) d = MyDialog(top,self.output) d.pack() top.protocol(WM_DELETE_WINDOW,d.Cancel) d.grab_set() d.wait_window(d) parent.protocol(WM_DELETE_WINDOW,parent.quit) self.output=d.GetOutput()
283.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 283 Outros m´todos da classe MyFileDialog: e def null(self): pass def Get_Output(self): return (self.output)
284.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 284 Classe MyDialog e seu m´todo construtor: e class MyDialog(Frame): MyDialog class - dialog for file save and open def __init__(self,parent,output): Frame.__init__(self,parent) self.output=output self.top=parent self.framefilename = Frame(self,bd=2) self.framelistfile = Frame(self,bd=2) self.framebuttons = Frame(self,bd=2) self.lbl = Label(self.framefilename,text=File:) self.ent = Entry(self.framefilename,width=fields_size()) self.ent.focus_set() self.ent.bind(Return,self.Enter) self.lblpath = Label(self.framefilename,text=Path:) self.path = Label(self.framefilename,text=Get_path(), width=fields_size(),justify=LEFT,relief=GROOVE) self.sb = Scrollbar(self.framelistfile) self.sb2 = Scrollbar(self.framelistfile,orient= HORIZONTAL)
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 287 Outros m´todos da classe MyDialog: e def GetOutput(self): return self.output def Showhide(self): Handler for the checkbutton if self.var.get() == show: ld = os.listdir(.) ld.sort() ld.insert(0,..) self.list.delete(0,END) for input in ld: self.list.insert(END,input) else: ld = os.listdir(.) ld.sort() self.list.delete(0,END) ld = Hide(ld) ld.insert(0,..) for input in ld: self.list.insert(END,input)
288.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 288 def Enter(self,event): Handler for the filenames entry field selection = self.ent.get() if os.path.isdir(selection): # is dir os.chdir(selection) self.list.delete(0,END) ld = os.listdir(.) ld.sort() ld.insert(0,..) for input in ld: self.list.insert(END,input) self.path[text] = Get_path() else: self.output = selection self.top.destroy() def Doubleclick(self,event): Handler for Double clicking in the listbox self.Ok() def Ok(self): Handler for the Ok button self.ent.delete(0,END)
289.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 289 selection = self.list.curselection() if selection != (): s = string.atoi(selection[0]) ld = os.listdir(.) ld.sort() if self.var.get() != show: ld=Hide(ld) if s!=0: fop = ld[s-1] if os.path.isdir(fop): os.chdir(fop) self.list.delete(0,END) ld = os.listdir(.) ld.sort() if self.var.get() != show: ld=Hide(ld) ld.insert(0,..) for input in ld: self.list.insert(END, input) self.path[text] = Get_path()
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 292 Fun¸˜es auxiliares do m´dulo: co o def fields_size(): return 30 def Get_path(): Get the absolute path from working path dir = os.path.abspath(.) if len(dir) fields_size(): dir = dir[:fields_size()/2-2]+...+dir[len(dir)- fields_size()/2+2:] return dir def Hide(list): Hide function - Removes all hidden files from a list list2 = [] for i in list: if i[0]!=’.’: list2.append(i) return list2
293.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 293 8.2.42 Widget Text Widget mais geral para tratar com textos. Algumas op¸oes: c˜ background Cor do fundo; borderwidth Espessura da borda; font Fonte usado no texto; foreground Cor do texto; height Altura do widget (em linhas); relief Idˆntico aos widgets anteriores; e width Largura do widget (em caracteres de texto);
294.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 294 wrap Op¸ao que indica como ser´ tratado o texto que c˜ a exceder o espa¸o dispon´ na linha; c ıvel xscrollcommand Para usar barra de rolagem horizontal; yscrollcommand Para usar barra de rolagem vertical.
295.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 295 Para manipular o texto s˜o usados ´ a ındices. ´ Indices: linha.coluna Posi¸ao ap´s a coluna; c˜ o linha.end Ao final da linha; INSERT Posi¸˜o de inser¸˜o; ca ca CURRENT Posi¸ao mais pr´xima ao cursor do mouse; c˜ o END Ao final do texto; SEL FIRST Imediatamente antes do texto selecionado; SEL LAST Imediatamente ap´s o exto selecionado. o
296.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 296 M´todos do widget: e .delete() Apagar texto; .get() Obter texto; .insert() Inserir texto; .search() Procurar um padr˜o. a
297.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 297 8.2.43 Exemplo: Editor ASCII Aparˆncia do programa: e
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 311 8.3 Extens˜es: Tix, BLT, Wxpython e o Python Mega Widgets Tix Fornece novos widgets e um novo empacotador com mais recursos; BLT Pacote que extende a biblioteca Tk; Wxpython Conjunto de widgets mais sofisticados; Provavelmente dever´ tornar-se o padr˜o; Home a a page: http://wxpython.org; Python Mega Widgets Conjunto de widgets mais sofisticados; Home page: http://pmw.sourceforge.net;
312.
8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 312 8.4 Programa¸˜o Visual com Tk ca VTCL Programa¸˜o visual em Tcl/Tk; Home page: ca http://vtcl.sourceforge.net.