SlideShare une entreprise Scribd logo
1  sur  313
Télécharger pour lire hors ligne
1




Introdu¸˜o ` Programa¸˜o em Python e
       ca a          ca
                 Tk
         Carlos A. P. Campani

          22 de abril de 2005
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.
ˆ
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                        4




   Links
   (Python Language Website)
   http://www.python.org
   (Python Resources)
   http://www.vex.net/parnassus/
   (Tcl/Tk Site)
   http://www.tcl.tk
ˆ
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
ˆ
REFERENCIAS                        6




   Programas
     • Python 2.1;
     • Tk 8;
     • Python-tkinter 2.1;
     • vi;
     • emacs;
     • gnuplot e m´dulo Gnuplot;
                  o
ˆ
REFERENCIAS                        7




     • Numeric 2.0;
     • MySQL 3;
     • Python-MySQLdb;
     • XFreeGL (OpenGL)/ Mesa3D;
     • PyOpenGL 2.
     • PIL 1.1.5
ˆ
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.
ˆ
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
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.
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;
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;
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
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!
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
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.
     >>>
4   USANDO O INTERPRETADOR                 17




     Control-D abandona o interpretador.

     >>> ^D
     $
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
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
     >>>
4   USANDO O INTERPRETADOR   20




     Aten¸˜o!
         ca
       • Atribui¸ao: =;
                c˜
       • Igualdade: ==.
     (inspirado em C)
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
4   USANDO O INTERPRETADOR          22




     >>> x = 15
     >>> x
     15
     >>> x = 3.1415
     >>> x
     3.1415000000000002
     Lembre-se: Tipagem dinˆmica!
                           a
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
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
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
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   27




     Tupla:
     >>>   x=(1,2,3)
     >>>   x[0]
     1
     >>>   x[1]
     2
     >>>   x[-1]
     3
     >>>   x[-2]
     2
     >>>
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]
4   USANDO O INTERPRETADOR   29




     >>> x
     [10,2,3,1000]
     >>>
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
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
4   USANDO O INTERPRETADOR                                 32


                                             Valor
                                               15




                             X




                         Namespace
          “Tipo do valor e n˜o tipo da vari´vel (nome)”.
                            a              a
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
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
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
     $
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   37
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
4   USANDO O INTERPRETADOR   39
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON           40




     5     Programa¸˜o B´sica Python
                   ca   a

     5.1   Identificadores

     Exemplos: x, a10, carlos campani
     Observa¸˜o: x = X
            ca
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON                      41




     5.2    N´ meros
             u

     Decimal: 15
     Hexadecimal: 0x1f
     Octal: 020
     Inteiro longo: 15L, 0x1fL, 020L
     Ponto flutuante: 327.2, 0., .33333, 2.01e-10
     Complexos: 3+2j
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON   42




     >>> a = 3+2j
     >>> b = complex(1,0)
     >>> print a+b
     (4+2j)
     >>> a.real
     3.0
     >>> a.imag
     2.0
     >>>
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
     >>>
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
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
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
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
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
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
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON          50




        >>> if ’a’ in [’a’,’b’,’c’]:
        ...      print "contido"
        ...
        contido
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   52




     Exemplos:
     >>>   3 | 4
     7
     >>>   3 & 4
     0
     >>>   4 << 1
     8
     >>>   4 << 2
     16
     >>>   ~3
     -4
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
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   55


        Exemplos:
        >>> x = (10,30,20)
        >>> print len(x)
        3
        >>> print max(x)
        30
        >>> print min(x)
        10
        >>> print x[0:2]
        (10,30)
        >>> x = [1,2,3]
        >>> print x[0:2]
        [1,2]
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]
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
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
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]
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]
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON      61




        Implementando CAR e CDR:
        >>> s=[1,2,3]
        >>> s[0] # CAR
        1
        >>> s[1:] # CDR
        [2,3]
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’
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
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                   65




        Exemplo:
        >>> x[’Fantomas’] = ’10-11-1960’
        >>> x.items()
        [(’Carlos’,’15-11-1962’),(’Fantomas’,
        ’10-11-1960’)]
        >>> x.has_key(’Carlos’)
        1
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
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;
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 ;
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]
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
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’)
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON         72




     5.7     Estruturas de Controle

     5.7.1   if

     if x>0: print "maior que zero"
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).
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
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
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON    76




     5.7.3   for

     >>> for i in [1,2,3,4,5]:
     ...          print i
     ...
     1
     2
     3
     4
     5
     >>>
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON   77




     >>> for i in range(1,6):
     ...           print i
     ...
     1
     2
     3
     4
     5
     >>>
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON                         78




     >>> for i in [’Ticiano’,’Jo~o Vitor’,’Luana’]:
                                a
     ...            print i
     ...
     Ticiano
     Jo~o Vitor
       a
     Luana
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’]
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]
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]
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
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)
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
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    86




     Exemplo:
     x = 0
     try:
          y=1/x
     except ZeroDivisionError:
          print "erro"
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON                            87




     Observa¸˜o: except pode receber mais de um erro
             ca
     (identificadores de erros separados por v´
                                             ırgulas).
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON       88




     5.9   Fun¸˜es
              co

     def fat(x):
          if x<2:
                return 1
          else:
                return x*fat(x-1)
     >>> print fat(5)
     120
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.
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.
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
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
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
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
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)
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
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
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
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON                       99




     5.10   Programa¸˜o Funcional
                    ca

      Listas+CAR+CDR+Fun¸oes Anˆnimas=Programa¸ao
                        c˜      o             c˜
                      Funcional
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().
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON        101




     Exemplo:
     >>> f = open("teste.txt","r")
     >>> x = f.read()
     >>> f.close()
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
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’]
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               105




     string Tratamento de strings;
        >>> import string
        >>> string.atoi("15")
        15
        >>> string.strip(" Como vai?   ")
        ’Como vai?’
        >>>
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
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
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
        >>>
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
5           ¸˜   ´
    PROGRAMACAO BASICA PYTHON                110




     gzip Compress˜o e descompress˜o gzip;
                  a               a
     readline GNU readline;
     zipfile Manuseio de arquivos zip.
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
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
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;
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
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
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    117




      • Instanciando:
        >>> atomo   = atomo(2,0,1,0)
        >>> print   atomo
        NumAtom=2   X=0 Y=1 Z=0
        >>> print   atomo.simbolo()
        He
        >>>
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.
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
        ...
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)
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.
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
        ...
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))
6           ¸˜
    PROGRAMACAO ORIENTADA A OBJETOS                       124




                               Alimento
                                     N
                                 s    NNN
                             ssss        NNN
                       ysssss               NNN
                                               N&
                   Leite                      Sucrilhos
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
               ¸                         126




     import Gnuplot,math

     x=[]
     i=0.0
     while i<2*math.pi:
             x.append([i,math.sin(i)])
             i+=0.005
     g=Gnuplot.Gnuplot()
     g.title("Seno")
     g.xlabel("X")
     g.ylabel("SEN(X)")
     g.plot(x)
     raw_input("pressione enter")
7   PYTHON AVANCADO
               ¸      127
7   PYTHON AVANCADO
               ¸                         128



     import Gnuplot,math

     x=[]
     y=[]
     i=0.0
     while i<2*math.pi:
             x.append([i,math.sin(i)])
             y.append([i,math.cos(i)])
             i+=0.005
     g=Gnuplot.Gnuplot()
     g.title("Seno/Cosseno")
     g.xlabel("X")
     g.ylabel("SEN(X)/COS(X)")
     g.plot(x,y)
     raw_input("pressione enter")
7   PYTHON AVANCADO
               ¸      129
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.
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
               ¸                    132




     >>> print a.shape
     (3,3)
     >>> reshape(a,(9,))
     >>> print a
     [0.,0.,0.,0.,0.,0.,0.,0.,0.]
7   PYTHON AVANCADO
               ¸                 133




     Determinante:
     >>> a = ones((2,2),Float)
     >>> a = a*10
     >>> print a
     [[10.,10.],
      [10.,10.]]
     >>> print determinant(a)
     0.0
7   PYTHON AVANCADO
               ¸                                  134


     Autovalores, autovetores e diagonaliza¸ao:
                                           c˜
     >>> a = array([0,1,.5,.5])
     >>> print a
     [0 1 .5 .5]
     >>> a = reshape(a,(2,2))
     >>> print a
     [[ 0. 1.]
      [ .5 .5]]
     >>> val,vet = eigenvectors(a)
     >>> vet = transpose(vet)
     >>> q1 = inverse(vet)
     >>> dia = identity(n)*val
     >>> print vet
7   PYTHON AVANCADO
               ¸                  135




     [[ 0.70710678 -0.89442719]
      [ 0.70710678 0.4472136 ]]
     >>> print q1
     [[ 0.47140452 0.94280904]
      [-0.74535599 0.74535599]]
     >>> print dia
     [[ 1. -0. ]
      [ 0. -0.5]]
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]]
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.
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
               ¸                                  139


     Exemplo:
     #include "Python.h"
     static PyObject *py_soma(PyObject *self,
                              PyObject *args) {
             double a,b,c;
             PyArg_ParseTuple(args,"dd",&a,&b);
             c=a+b;
             return Py_BuildValue("d",c);
     }
     static PyMethodDef Somalib_methods[]={
             {"soma",py_soma,METH_VARARGS},
             {NULL,NULL}
     };
7   PYTHON AVANCADO
               ¸                                    140




     void initSomalib() {
             (void) Py_InitModule("Somalib",
                                Somalib_methods);
     }
7   PYTHON AVANCADO
               ¸                                141




     Como compilar:
     cc -I/usr/include/python2.1 -c Somalib.c
     cc -shared Somalib.o -o Somalib.so
7   PYTHON AVANCADO
               ¸                            142




     Como Python encontra os m´dulos?
                              o
      • PYTHONPATH;
      • Diret´rio corrente;
             o
      • /usr/lib/python2.1/site-packages.
7   PYTHON AVANCADO
               ¸                 143




     Como usar:
     >>> import Somalib
     >>> Somalib.soma(10,20)
     30
     ou
     >>> from Somalib import *
     >>> soma(10,20)
     30
7   PYTHON AVANCADO
               ¸                                     144




     Outro exemplo:
     #include "Python.h"
     static PyObject *py_Imprime(PyObject *self,
                                 PyObject *args) {
             char *str;
             PyArg_ParseTuple(args,"s",&str);
             printf("%sn",str);
             Py_INCREF(Py_None);
             return Py_None;
     }
7   PYTHON AVANCADO
               ¸                                     145




     static PyObject *py_Tamanho(PyObject *self,
                                 PyObject *args) {
             char *str;
             int t;
             PyArg_ParseTuple(args,"s",&str);
             t=0;
             while (str[t]!=0)
                        t++;
             return Py_BuildValue("i",t);
     }
7   PYTHON AVANCADO
               ¸                                      146




     static PyMethodDef TrataString_methods[]={
             {"Tamanho",py_Tamanho,METH_VARARGS},
             {"Imprime",py_Imprime,METH_VARARGS},
             {NULL,NULL}
     };

     void initTrataString() {
             (void) Py_InitModule("TrataString",
                              TrataString_methods);
     }
7   PYTHON AVANCADO
               ¸           147




     Para retornar None:
     Py_INCREF(Py_None)
     return Py_None
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
               ¸                 149




     #include "stdio.h"
     main()
     {
             int x;
             scanf("%d",&x);
             printf("%d",x*2);
     }



     $ gcc -o teste.o teste.c
7   PYTHON AVANCADO
               ¸                           150




     >>>   import os
     >>>   f = os.popen("./teste.o","w")
     >>>   f.write("15")
     >>>   f.flush()
     >>>   f.close()
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.
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
               ¸                                                                   153




     ...
             2253 function calls (104 primitive calls) in 0.140 CPU seconds

       Ordered by: standard name

        ncalls   tottime   percall   cumtime   percall filename:lineno(function)
             1     0.000     0.000     0.100     0.100 <string>:1(?)
             1     0.040     0.040     0.140     0.140 profile:0(main())
             0     0.000               0.000           profile:0(profiler)
            50     0.000    0.000      0.000     0.000 random.py:154(random)
             1     0.010    0.010      0.100     0.100 teste.py:12(main)
             1     0.000    0.000      0.000     0.000 teste.py:2(escolhe)
       2199/50     0.090    0.000      0.090     0.002 teste.py:7(fat)
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).
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);
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
               ¸                                            157



     glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH)
     glutInitWindowSize(400,400)
     glClearColor(0.,0.,0.,1.)
     glutCreateWindow("Esferas")
     glEnable(GL_LIGHTING)
     lightZeroPosition = [-5.,2.,-5.,2.]
     lightZeroColor = [.2,.5,.7,.5]
     glLightfv(GL_LIGHT0,GL_POSITION,lightZeroPosition)
     glLightfv(GL_LIGHT0,GL_DIFFUSE,lightZeroColor)
     glLightf(GL_LIGHT0,GL_CONSTANT_ATTENUATION,0.5)
     glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION,0.03)
     glEnable(GL_LIGHT0)
     glutDisplayFunc(display)
     glutMainLoop()
7   PYTHON AVANCADO
               ¸                           158




     def display():
             glColor3f(1.,1.,1.)
             glTranslatef(0.,.25,-0.25)
             glutSolidSphere(.6,100.,5.)
             glTranslatef(-0.3,-0.6,.5)
             glutSolidSphere(.4,100.,5.)
             glutSwapBuffers()
7   PYTHON AVANCADO
               ¸      159
7   PYTHON AVANCADO
               ¸                                   160




     7.8   PIL - Python Imaging Library
      • Processamento de imagens;
      • http://www.pythonware.com/products/pil/.
7   PYTHON AVANCADO
               ¸                                         161




     >>> import Image
     >>> imagem = Image.open("darthmaul2.jpg")
     >>> print imagem.format, imagem.size, imagem.mode
     JPEG (1024, 768) RGB
     >>> imagem.save("darth.gif")
7   PYTHON AVANCADO
               ¸                                            162




     7.9   Usando MySQL
      • M´dulo Python-MySQLdb;
         o
      • Vocˆ precisa de acesso ao servidor MySQL (senha).
           e
7   PYTHON AVANCADO
               ¸                                  163




     Banco de dados “meu”, tabela “animal”:

                  Nome       Data de nascimento
                 Hamster         2003-01-01
                 Rintintin       1950-11-15
                  Acar´
                      a          1994-11-15
7   PYTHON AVANCADO
               ¸                                        164


     >>> import MySQLdb
     >>> con=MySQLdb.Connection(user="root",passwd=
     <senha>,db="meu")
     >>> curs=con.cursor()
     >>> curs.execute("select * from animal")
     >>> print curs.fetchall()
     ((’Hamster’, ’2003-01-01’), (’Rintintin’,
     ’1950-11-15’), (’Acara’, ’1994-11-15’))
     >>> curs.execute("select nome from animal where
      nascimento>19940101")
     >>> print curs.fetchall()
     ((’Hamster’,), (’Acara’,))
     >>> curs.execute("select nome from animal where
      nascimento>19940101 and nome<>’Acara’")
7   PYTHON AVANCADO
               ¸                 165




     >>> print curs.fetchall()
     ((’Hamster’,),)
     >>> curs.close()
     >>> con.close()
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);
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.
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.
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
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
               ¸                                                     171




     Sexo:
       <INPUT type="radio" name="Sexo" value="homem" checked>Homem
       <INPUT type="radio" name="Sexo" value="mulher">Mulher</P>
     <INPUT type="submit" value="Submeter" name="Botao">
     </FORM>

     </BODY>
     </HTML>
7   PYTHON AVANCADO
               ¸                                172

     #!/usr/bin/python
     import cgi

     print "Content-Type: text/html"
     print

     print "<TITLE>CGI teste</TITLE>"
     form=cgi.FieldStorage()
     Prefere=form.getvalue("Prefere")
     Valor=form.getvalue("Valor")
     Sexo=form.getvalue("Sexo")
     if Prefere=="0":
             Preferencia=""
     elif Prefere=="1":
             Preferencia="Carro"
     else:
             Preferencia="Casa"
     print "Prefer^ncia: %s<p>"%(Preferencia)
                  e
     print "Valor: %s<p>"%(Valor)
     print "Sexo: %s<p>"%(Sexo)
7   PYTHON AVANCADO
               ¸                              173




     Curiosidade:
                      http://www.google.com
               GOOGLE=Linux+Python+MySQL
7   PYTHON AVANCADO
               ¸                      174


     7.12   Suporte a Som

     M´dulos sunau e wave.
      o
     import sunau
     i=sunau.open("pequeno.au","r")
     nchannels=i.getnchannels()
     samplewidth=i.getsampwidth()
     framerate=i.getframerate()
     nframes=i.getnframes()
     comptype=i.getcomptype()
     compname=i.getcompname()
     s=i.readframes(nframes)
     i.close()
7   PYTHON AVANCADO
               ¸                        175




     o=sunau.open("/dev/audio","w")
     o.setnchannels(nchannels)
     o.setsampwidth(samplewidth)
     o.setframerate(framerate)
     o.setnframes(nframes)
     o.setcomptype(comptype,compname)
     o.writeframes(s)
     o.close()
7   PYTHON AVANCADO
               ¸                               176




     7.13                    ´
            Processamento de Audio -
            Ecasound

     Processamento de ´udio em Python/Linux.
                      a
     http://www.eca.cx/ecasound/
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
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;
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.
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
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
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.
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()
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   185
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
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
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;
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.
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).
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
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.
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
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).
8           ¸˜    ´
    PROGRAMACAO GRAFICA USANDO TK                  195




      3. Usando-se .place() - Permite posicionar
         explicitamente o widget;
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
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.
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
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”.
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   201
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
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   204
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;
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
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   208
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;
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   211
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
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk
Introdução à Programação Python e Tk

Contenu connexe

Tendances

Introdução a engenharia de software aula 01
Introdução a engenharia de software   aula 01Introdução a engenharia de software   aula 01
Introdução a engenharia de software aula 01Franklin Matos Correia
 
Tutorial Planning Poker Para Times Remotos
Tutorial Planning Poker Para Times RemotosTutorial Planning Poker Para Times Remotos
Tutorial Planning Poker Para Times RemotosRildo (@rildosan) Santos
 
Criação de tabelas com HTML
Criação de tabelas com HTMLCriação de tabelas com HTML
Criação de tabelas com HTMLLeonardo Soares
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01 Léo Dias
 
Análise e Modelagem de Software
Análise e Modelagem de SoftwareAnálise e Modelagem de Software
Análise e Modelagem de SoftwareMarcelo Yamaguti
 
Aula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de UsuárioAula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de UsuárioAndré Constantino da Silva
 
POO - Unidade 2 (parte 3) - Diagrama de Sequência (versão 1)
POO - Unidade 2 (parte 3) - Diagrama de Sequência  (versão 1)POO - Unidade 2 (parte 3) - Diagrama de Sequência  (versão 1)
POO - Unidade 2 (parte 3) - Diagrama de Sequência (versão 1)Marcello Thiry
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmosjormad
 
Algoritmos e Programação: Matrizes
Algoritmos e Programação: MatrizesAlgoritmos e Programação: Matrizes
Algoritmos e Programação: MatrizesAlex Camargo
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)Márcio Rizzatto
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareÁlvaro Farias Pinheiro
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)Marcel Caraciolo
 

Tendances (20)

Introdução a engenharia de software aula 01
Introdução a engenharia de software   aula 01Introdução a engenharia de software   aula 01
Introdução a engenharia de software aula 01
 
Tutorial Planning Poker Para Times Remotos
Tutorial Planning Poker Para Times RemotosTutorial Planning Poker Para Times Remotos
Tutorial Planning Poker Para Times Remotos
 
Criação de tabelas com HTML
Criação de tabelas com HTMLCriação de tabelas com HTML
Criação de tabelas com HTML
 
IDE Falcon C++
IDE Falcon C++IDE Falcon C++
IDE Falcon C++
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Aula diagrama de classes
Aula diagrama de classesAula diagrama de classes
Aula diagrama de classes
 
Análise e Modelagem de Software
Análise e Modelagem de SoftwareAnálise e Modelagem de Software
Análise e Modelagem de Software
 
Aula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de UsuárioAula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de Usuário
 
POO - Unidade 2 (parte 3) - Diagrama de Sequência (versão 1)
POO - Unidade 2 (parte 3) - Diagrama de Sequência  (versão 1)POO - Unidade 2 (parte 3) - Diagrama de Sequência  (versão 1)
POO - Unidade 2 (parte 3) - Diagrama de Sequência (versão 1)
 
Aula sobre Linux.
Aula sobre Linux. Aula sobre Linux.
Aula sobre Linux.
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos e Programação: Matrizes
Algoritmos e Programação: MatrizesAlgoritmos e Programação: Matrizes
Algoritmos e Programação: Matrizes
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)
 
Modelos de processos de software
Modelos de processos de softwareModelos de processos de software
Modelos de processos de software
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Use a Cabeça - PHP.pdf
Use a Cabeça - PHP.pdfUse a Cabeça - PHP.pdf
Use a Cabeça - PHP.pdf
 
Algoritmos - Matrizes
Algoritmos - MatrizesAlgoritmos - Matrizes
Algoritmos - Matrizes
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)
 

En vedette

Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantesrichardsonlima
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyGilson Filho
 
Arduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware LivresArduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware LivresÁlvaro Justen
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonGiancarlo Silva
 
Python no Celular
Python no CelularPython no Celular
Python no Celulariuridiniz
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Dados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaDados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaÁlvaro Justen
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoÁlvaro Justen
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonRelsi Maron
 
Desenvolvendo DSLs Em Python
Desenvolvendo DSLs Em PythonDesenvolvendo DSLs Em Python
Desenvolvendo DSLs Em PythonRodrigo Manhães
 
Construindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonConstruindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonMarcel Caraciolo
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Webantonio sérgio nogueira
 

En vedette (20)

Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Aprendendo python
Aprendendo pythonAprendendo python
Aprendendo python
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantes
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Arduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware LivresArduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware Livres
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Python Interface Gráfica Tkinter
Python Interface Gráfica TkinterPython Interface Gráfica Tkinter
Python Interface Gráfica Tkinter
 
Python no Celular
Python no CelularPython no Celular
Python no Celular
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Dados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaDados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira Pythônica
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremo
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em Python
 
Canivete python
Canivete pythonCanivete python
Canivete python
 
Desenvolvendo DSLs Em Python
Desenvolvendo DSLs Em PythonDesenvolvendo DSLs Em Python
Desenvolvendo DSLs Em Python
 
Twittando Com Python
Twittando Com PythonTwittando Com Python
Twittando Com Python
 
Construindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonConstruindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com Python
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 

Similaire à Introdução à Programação Python e Tk

Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfPARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfAthena542429
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonFabio Spanhol
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
python_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfpython_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfProfIvanSaboia
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termosValore I/O
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 
Linux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCLinux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCEmbarcados
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar pythonLourenço Junior
 
Linguagen..
Linguagen..Linguagen..
Linguagen..essa
 
Administração de sistemas usando Python
Administração de sistemas usando PythonAdministração de sistemas usando Python
Administração de sistemas usando PythonHelio Loureiro
 

Similaire à Introdução à Programação Python e Tk (20)

Introdução à linguagem python
Introdução à linguagem pythonIntrodução à linguagem python
Introdução à linguagem python
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfPARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
python_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfpython_para_desenvolvedores.pdf
python_para_desenvolvedores.pdf
 
Python, CPython, Pythonico, Cython
Python, CPython, Pythonico, CythonPython, CPython, Pythonico, Cython
Python, CPython, Pythonico, Cython
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termos
 
Python for Maemo
Python for MaemoPython for Maemo
Python for Maemo
 
Mini Curso de C
Mini Curso de CMini Curso de C
Mini Curso de C
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 
Linux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCLinux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoC
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar python
 
Linguagen..
Linguagen..Linguagen..
Linguagen..
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
Administração de sistemas usando Python
Administração de sistemas usando PythonAdministração de sistemas usando Python
Administração de sistemas usando Python
 

Plus de Carlos Campani

Técnicas de integração
Técnicas de integraçãoTécnicas de integração
Técnicas de integraçãoCarlos Campani
 
Lista de exercícios 3
Lista de exercícios 3Lista de exercícios 3
Lista de exercícios 3Carlos Campani
 
Lista de exercícios 2
Lista de exercícios 2Lista de exercícios 2
Lista de exercícios 2Carlos Campani
 
Aplicações da integração
Aplicações da integraçãoAplicações da integração
Aplicações da integraçãoCarlos Campani
 
Lista de exercícios 1
Lista de exercícios 1Lista de exercícios 1
Lista de exercícios 1Carlos Campani
 
ANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃOANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃOCarlos Campani
 
PROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕESPROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕESCarlos Campani
 
Funções, suas propriedades e gráfico
Funções, suas propriedades e gráficoFunções, suas propriedades e gráfico
Funções, suas propriedades e gráficoCarlos Campani
 
Solução de equações modulares
Solução de equações modularesSolução de equações modulares
Solução de equações modularesCarlos Campani
 
Equações polinomiais
Equações polinomiaisEquações polinomiais
Equações polinomiaisCarlos Campani
 
Instruções de Aprendiz
Instruções de AprendizInstruções de Aprendiz
Instruções de AprendizCarlos Campani
 
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Carlos Campani
 

Plus de Carlos Campani (20)

Técnicas de integração
Técnicas de integraçãoTécnicas de integração
Técnicas de integração
 
Lista de exercícios 3
Lista de exercícios 3Lista de exercícios 3
Lista de exercícios 3
 
Lista de exercícios 2
Lista de exercícios 2Lista de exercícios 2
Lista de exercícios 2
 
Aplicações da integração
Aplicações da integraçãoAplicações da integração
Aplicações da integração
 
Lista de exercícios 1
Lista de exercícios 1Lista de exercícios 1
Lista de exercícios 1
 
Integral
IntegralIntegral
Integral
 
Semana 14
Semana 14 Semana 14
Semana 14
 
Semana 13
Semana 13 Semana 13
Semana 13
 
Semana 12
Semana 12Semana 12
Semana 12
 
Semana 11
Semana 11Semana 11
Semana 11
 
Semana 10
Semana 10 Semana 10
Semana 10
 
Semana 9
Semana 9 Semana 9
Semana 9
 
ANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃOANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃO
 
PROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕESPROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕES
 
Funções, suas propriedades e gráfico
Funções, suas propriedades e gráficoFunções, suas propriedades e gráfico
Funções, suas propriedades e gráfico
 
Solução de equações modulares
Solução de equações modularesSolução de equações modulares
Solução de equações modulares
 
Equações polinomiais
Equações polinomiaisEquações polinomiais
Equações polinomiais
 
PROVAS DE TEOREMAS
PROVAS DE TEOREMASPROVAS DE TEOREMAS
PROVAS DE TEOREMAS
 
Instruções de Aprendiz
Instruções de AprendizInstruções de Aprendiz
Instruções de Aprendiz
 
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
 

Dernier

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 

Dernier (6)

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Introdução à Programação Python e Tk

  • 1. 1 Introdu¸˜o ` Programa¸˜o em Python e ca a ca Tk Carlos A. P. Campani 22 de abril de 2005
  • 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
  • 4. ˆ REFERENCIAS 4 Links (Python Language Website) http://www.python.org (Python Resources) http://www.vex.net/parnassus/ (Tcl/Tk Site) http://www.tcl.tk
  • 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
  • 7. ˆ REFERENCIAS 7 • Numeric 2.0; • MySQL 3; • Python-MySQLdb; • XFreeGL (OpenGL)/ Mesa3D; • PyOpenGL 2. • PIL 1.1.5
  • 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!).
  • 27. 4 USANDO O INTERPRETADOR 27 Tupla: >>> x=(1,2,3) >>> x[0] 1 >>> x[1] 2 >>> x[-1] 3 >>> x[-2] 2 >>>
  • 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
  • 37. 4 USANDO O INTERPRETADOR 37
  • 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
  • 39. 4 USANDO O INTERPRETADOR 39
  • 40. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 40 5 Programa¸˜o B´sica Python ca a 5.1 Identificadores Exemplos: x, a10, carlos campani Observa¸˜o: x = X ca
  • 41. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 41 5.2 N´ meros u Decimal: 15 Hexadecimal: 0x1f Octal: 020 Inteiro longo: 15L, 0x1fL, 020L Ponto flutuante: 327.2, 0., .33333, 2.01e-10 Complexos: 3+2j
  • 42. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 42 >>> a = 3+2j >>> b = complex(1,0) >>> print a+b (4+2j) >>> a.real 3.0 >>> a.imag 2.0 >>>
  • 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˜
  • 52. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 52 Exemplos: >>> 3 | 4 7 >>> 3 & 4 0 >>> 4 << 1 8 >>> 4 << 2 16 >>> ~3 -4
  • 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
  • 55. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 55 Exemplos: >>> x = (10,30,20) >>> print len(x) 3 >>> print max(x) 30 >>> print min(x) 10 >>> print x[0:2] (10,30) >>> x = [1,2,3] >>> print x[0:2] [1,2]
  • 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
  • 65. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 65 Exemplo: >>> x[’Fantomas’] = ’10-11-1960’ >>> x.items() [(’Carlos’,’15-11-1962’),(’Fantomas’, ’10-11-1960’)] >>> x.has_key(’Carlos’) 1
  • 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.
  • 86. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 86 Exemplo: x = 0 try: y=1/x except ZeroDivisionError: print "erro"
  • 87. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 87 Observa¸˜o: except pode receber mais de um erro ca (identificadores de erros separados por v´ ırgulas).
  • 88. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 88 5.9 Fun¸˜es co def fat(x): if x<2: return 1 else: return x*fat(x-1) >>> print fat(5) 120
  • 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() >>>
  • 105. 5 ¸˜ ´ PROGRAMACAO BASICA PYTHON 105 string Tratamento de strings; >>> import string >>> string.atoi("15") 15 >>> string.strip(" Como vai? ") ’Como vai?’ >>>
  • 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
  • 117. 6 ¸˜ PROGRAMACAO ORIENTADA A OBJETOS 117 • Instanciando: >>> atomo = atomo(2,0,1,0) >>> print atomo NumAtom=2 X=0 Y=1 Z=0 >>> print atomo.simbolo() He >>>
  • 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.
  • 126. 7 PYTHON AVANCADO ¸ 126 import Gnuplot,math x=[] i=0.0 while i<2*math.pi: x.append([i,math.sin(i)]) i+=0.005 g=Gnuplot.Gnuplot() g.title("Seno") g.xlabel("X") g.ylabel("SEN(X)") g.plot(x) raw_input("pressione enter")
  • 127. 7 PYTHON AVANCADO ¸ 127
  • 128. 7 PYTHON AVANCADO ¸ 128 import Gnuplot,math x=[] y=[] i=0.0 while i<2*math.pi: x.append([i,math.sin(i)]) y.append([i,math.cos(i)]) i+=0.005 g=Gnuplot.Gnuplot() g.title("Seno/Cosseno") g.xlabel("X") g.ylabel("SEN(X)/COS(X)") g.plot(x,y) raw_input("pressione enter")
  • 129. 7 PYTHON AVANCADO ¸ 129
  • 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.]]
  • 132. 7 PYTHON AVANCADO ¸ 132 >>> print a.shape (3,3) >>> reshape(a,(9,)) >>> print a [0.,0.,0.,0.,0.,0.,0.,0.,0.]
  • 133. 7 PYTHON AVANCADO ¸ 133 Determinante: >>> a = ones((2,2),Float) >>> a = a*10 >>> print a [[10.,10.], [10.,10.]] >>> print determinant(a) 0.0
  • 134. 7 PYTHON AVANCADO ¸ 134 Autovalores, autovetores e diagonaliza¸ao: c˜ >>> a = array([0,1,.5,.5]) >>> print a [0 1 .5 .5] >>> a = reshape(a,(2,2)) >>> print a [[ 0. 1.] [ .5 .5]] >>> val,vet = eigenvectors(a) >>> vet = transpose(vet) >>> q1 = inverse(vet) >>> dia = identity(n)*val >>> print vet
  • 135. 7 PYTHON AVANCADO ¸ 135 [[ 0.70710678 -0.89442719] [ 0.70710678 0.4472136 ]] >>> print q1 [[ 0.47140452 0.94280904] [-0.74535599 0.74535599]] >>> print dia [[ 1. -0. ] [ 0. -0.5]]
  • 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.
  • 139. 7 PYTHON AVANCADO ¸ 139 Exemplo: #include "Python.h" static PyObject *py_soma(PyObject *self, PyObject *args) { double a,b,c; PyArg_ParseTuple(args,"dd",&a,&b); c=a+b; return Py_BuildValue("d",c); } static PyMethodDef Somalib_methods[]={ {"soma",py_soma,METH_VARARGS}, {NULL,NULL} };
  • 140. 7 PYTHON AVANCADO ¸ 140 void initSomalib() { (void) Py_InitModule("Somalib", Somalib_methods); }
  • 141. 7 PYTHON AVANCADO ¸ 141 Como compilar: cc -I/usr/include/python2.1 -c Somalib.c cc -shared Somalib.o -o Somalib.so
  • 142. 7 PYTHON AVANCADO ¸ 142 Como Python encontra os m´dulos? o • PYTHONPATH; • Diret´rio corrente; o • /usr/lib/python2.1/site-packages.
  • 143. 7 PYTHON AVANCADO ¸ 143 Como usar: >>> import Somalib >>> Somalib.soma(10,20) 30 ou >>> from Somalib import * >>> soma(10,20) 30
  • 144. 7 PYTHON AVANCADO ¸ 144 Outro exemplo: #include "Python.h" static PyObject *py_Imprime(PyObject *self, PyObject *args) { char *str; PyArg_ParseTuple(args,"s",&str); printf("%sn",str); Py_INCREF(Py_None); return Py_None; }
  • 145. 7 PYTHON AVANCADO ¸ 145 static PyObject *py_Tamanho(PyObject *self, PyObject *args) { char *str; int t; PyArg_ParseTuple(args,"s",&str); t=0; while (str[t]!=0) t++; return Py_BuildValue("i",t); }
  • 146. 7 PYTHON AVANCADO ¸ 146 static PyMethodDef TrataString_methods[]={ {"Tamanho",py_Tamanho,METH_VARARGS}, {"Imprime",py_Imprime,METH_VARARGS}, {NULL,NULL} }; void initTrataString() { (void) Py_InitModule("TrataString", TrataString_methods); }
  • 147. 7 PYTHON AVANCADO ¸ 147 Para retornar None: Py_INCREF(Py_None) return Py_None
  • 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.
  • 149. 7 PYTHON AVANCADO ¸ 149 #include "stdio.h" main() { int x; scanf("%d",&x); printf("%d",x*2); } $ gcc -o teste.o teste.c
  • 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()’)
  • 153. 7 PYTHON AVANCADO ¸ 153 ... 2253 function calls (104 primitive calls) in 0.140 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.100 0.100 <string>:1(?) 1 0.040 0.040 0.140 0.140 profile:0(main()) 0 0.000 0.000 profile:0(profiler) 50 0.000 0.000 0.000 0.000 random.py:154(random) 1 0.010 0.010 0.100 0.100 teste.py:12(main) 1 0.000 0.000 0.000 0.000 teste.py:2(escolhe) 2199/50 0.090 0.000 0.090 0.002 teste.py:7(fat)
  • 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 *
  • 157. 7 PYTHON AVANCADO ¸ 157 glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH) glutInitWindowSize(400,400) glClearColor(0.,0.,0.,1.) glutCreateWindow("Esferas") glEnable(GL_LIGHTING) lightZeroPosition = [-5.,2.,-5.,2.] lightZeroColor = [.2,.5,.7,.5] glLightfv(GL_LIGHT0,GL_POSITION,lightZeroPosition) glLightfv(GL_LIGHT0,GL_DIFFUSE,lightZeroColor) glLightf(GL_LIGHT0,GL_CONSTANT_ATTENUATION,0.5) glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION,0.03) glEnable(GL_LIGHT0) glutDisplayFunc(display) glutMainLoop()
  • 158. 7 PYTHON AVANCADO ¸ 158 def display(): glColor3f(1.,1.,1.) glTranslatef(0.,.25,-0.25) glutSolidSphere(.6,100.,5.) glTranslatef(-0.3,-0.6,.5) glutSolidSphere(.4,100.,5.) glutSwapBuffers()
  • 159. 7 PYTHON AVANCADO ¸ 159
  • 160. 7 PYTHON AVANCADO ¸ 160 7.8 PIL - Python Imaging Library • Processamento de imagens; • http://www.pythonware.com/products/pil/.
  • 161. 7 PYTHON AVANCADO ¸ 161 >>> import Image >>> imagem = Image.open("darthmaul2.jpg") >>> print imagem.format, imagem.size, imagem.mode JPEG (1024, 768) RGB >>> imagem.save("darth.gif")
  • 162. 7 PYTHON AVANCADO ¸ 162 7.9 Usando MySQL • M´dulo Python-MySQLdb; o • Vocˆ precisa de acesso ao servidor MySQL (senha). e
  • 163. 7 PYTHON AVANCADO ¸ 163 Banco de dados “meu”, tabela “animal”: Nome Data de nascimento Hamster 2003-01-01 Rintintin 1950-11-15 Acar´ a 1994-11-15
  • 164. 7 PYTHON AVANCADO ¸ 164 >>> import MySQLdb >>> con=MySQLdb.Connection(user="root",passwd= <senha>,db="meu") >>> curs=con.cursor() >>> curs.execute("select * from animal") >>> print curs.fetchall() ((’Hamster’, ’2003-01-01’), (’Rintintin’, ’1950-11-15’), (’Acara’, ’1994-11-15’)) >>> curs.execute("select nome from animal where nascimento>19940101") >>> print curs.fetchall() ((’Hamster’,), (’Acara’,)) >>> curs.execute("select nome from animal where nascimento>19940101 and nome<>’Acara’")
  • 165. 7 PYTHON AVANCADO ¸ 165 >>> print curs.fetchall() ((’Hamster’,),) >>> curs.close() >>> con.close()
  • 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>
  • 171. 7 PYTHON AVANCADO ¸ 171 Sexo: <INPUT type="radio" name="Sexo" value="homem" checked>Homem <INPUT type="radio" name="Sexo" value="mulher">Mulher</P> <INPUT type="submit" value="Submeter" name="Botao"> </FORM> </BODY> </HTML>
  • 172. 7 PYTHON AVANCADO ¸ 172 #!/usr/bin/python import cgi print "Content-Type: text/html" print print "<TITLE>CGI teste</TITLE>" form=cgi.FieldStorage() Prefere=form.getvalue("Prefere") Valor=form.getvalue("Valor") Sexo=form.getvalue("Sexo") if Prefere=="0": Preferencia="" elif Prefere=="1": Preferencia="Carro" else: Preferencia="Casa" print "Prefer^ncia: %s<p>"%(Preferencia) e print "Valor: %s<p>"%(Valor) print "Sexo: %s<p>"%(Sexo)
  • 173. 7 PYTHON AVANCADO ¸ 173 Curiosidade: http://www.google.com GOOGLE=Linux+Python+MySQL
  • 174. 7 PYTHON AVANCADO ¸ 174 7.12 Suporte a Som M´dulos sunau e wave. o import sunau i=sunau.open("pequeno.au","r") nchannels=i.getnchannels() samplewidth=i.getsampwidth() framerate=i.getframerate() nframes=i.getnframes() comptype=i.getcomptype() compname=i.getcompname() s=i.readframes(nframes) i.close()
  • 175. 7 PYTHON AVANCADO ¸ 175 o=sunau.open("/dev/audio","w") o.setnchannels(nchannels) o.setsampwidth(samplewidth) o.setframerate(framerate) o.setnframes(nframes) o.setcomptype(comptype,compname) o.writeframes(s) o.close()
  • 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).
  • 185. 8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 185
  • 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
  • 201. 8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 201
  • 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
  • 204. 8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 204
  • 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
  • 208. 8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 208
  • 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()
  • 211. 8 ¸˜ ´ PROGRAMACAO GRAFICA USANDO TK 211
  • 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