2. Antes de Comecar
Interpretador Interativo
Maquina de testes de código Python
Escolha uma IDE!
http://www.python.org.br/wiki/IdesPython
Ou o velho Notepad >:)
3. Review
2ª Aula
Orientação a Objetos com Python
Classes
Métodos (construtor)
Atributos
Herança
Módulos e Bibliotecas
SDK s60 e Python
Introdução ao pys60
Appuifw
Algumas Referências!
4. PyS60 – Estrutura de uma Aplicação appuifw
O Objeto appuifw.app
Estrutura
6. PyS60 – Estrutura de uma Aplicação appuifw
appuifw.app.body
Pode ser:
Canvas
Form
Listbox
Text
Área pode ser aumentada!
appuifw.app.screen = 'full'
appuifw.app.screen = 'large'
appuifw.app.screen = 'normal'
13. PyS60 - Teclado
Exerc cio!í
Crie uma Agenda de Contatos. O usuário será capaz de
escolher entre adicionar pessoas a agenda (onde o programa
pede Nome e Telefone da pessoa) ou buscar pelo nome
usando uma multi_selection list.
Ao selecionar o nome da pessoa, o programa deverá imprimir
em um appuifw.Text() o Nome da pessoa e o Telefone dela. Ao
selecionar o menu novamente o appuifw.Text() deverá ser
apagado.
É desejável que o programa utilize Orientação a Objetos.
17. PyS60 - Teclado
Exemplo de Uso
import appuifw, key_codes, e32
def keys(event):
if event['keycode'] == key_codes.EKeyUpArrow:
appuifw.note(u"Up arrow foi pressionado!")
elif event['keycode'] == key_codes.EKeyDownArrow:
appuifw.note(u"Down Arrow foi pressionado!")
def quit():
app_lock.signal()
canvas = appuifw.Canvas(event_callback = keys)
appuifw.app.body = canvas
appuifw.app.exit_key_handler = quit
app_lock = e32.Ao_lock()
app_lock.wait()
18. PyS60 - Teclado
Exerc cio!í
Criar uma aplicação que capture eventos do teclado e chame
funções da appuifw (query e note, por exemplo.)
É desejável que o programa utilize Orientação a Objetos, com
bibliotecas de captura de eventos e de gerência dos callbacks.
20. Graphics e appuifw.Canvas
Gráficos 2d e 3d
Interface mais customizada
Gerencia Imagens (graphics.Image)
Desenhos Geométricos
Elipse, linha, retângulo
appuifw.app.body = appuifw.Canvas()
21. Graphics e appuifw.Canvas
Gráficos 2d e 3d
Interface mais customizada
Gerencia Imagens (graphics.Image)
Desenhos Geométricos
Elipse, linha, retângulo
appuifw.app.body = appuifw.Canvas()
22. appuifw.Canvas
appuifw.Canvas
Criação de um Canvas no body da aplicação
Callbacks de redraw e event
Dentro do Canvas pode-se criar:
Linhas
Poligonos
Retângulos
Elipse
Pontos
Textos
O método blit()
24. Graphics e Canvas
Gerenciando Imagens
graphics.Image + appuifw.Canvas
graphics.Image é um buffer
Evita “flicks” na tela
blit()
graphics.Image
resize, transpose, save
25. Graphics e Canvas
Exemplo
import e32,key_codes,graphics
from appuifw import *
def draw_rect():
img.rectangle((50,100,100,150), fill = (255,255,0))
def draw_point():
img.point((90,50), outline=(255,0,0),width=30)
def handle_redraw(rect):
if img: canvas.blit(img)
def handle_event(event):
ev = event[“keycode”]
if event[“type”] == EEventKeyDown:
img.clear((0,0,255))
if ev == key_codes.EKeyUpArrow:
draw_point()
elif ev == key_codes.EKeyDownArrow:
draw_rect()
def quit():
app_lock.signal()
img = None
canvas = Canvas(redraw_callback =
handle_redraw, event_callback =
handle_event)
app.body = canvas
app.screen = 'full'
app.exit_key_handler = quit
w, h = canvas.size
img = graphics.Image.new((w,h))
img.clear((0,0,255))
app_lock = e32.Ao_lock()
app_lock.wait()
26. PyS60 - Teclado
Exerc cio!í
Criar uma aplicação que, a cada evento gerado do joystick,
mude a cor do body.
Criar também um menu (popup_menu) com a escolha de
escrever um nome (query). Esse nome escrito irá aparecer no
meio da tela com a cor preta (usando canvas.text ao invés de
appuifw.text).
30. Data Handling
Gerenciamento de Arquivos e Dados
C: → Memória Interna do Dispositivo
D: → RAM (read-only)
E: → Cartão de Memória
Z: → ROM (read-only)
Fotos
C:Images ou E:Images
Músicas
C:Sounds ou E:Sounds
Arquivos
C:Data ou E:Data
31. Data Handling
Criando um Diretório para sua Aplicação
import os, os.path
PATH = u”C:DataMinhaAplicação”
if not os.path.exists(PATH): os.makedirs(PATH)
Criando Arquivos
Os modos podem ser:
a → append
w → write
r → read
Arquivo = open(“C:Datanomedoarquivo.txt”,”w”)
wb → Escreve binário
32. Data Handling
Escrevendo e lendo de um Arquivo
arquivo = open(“C:Datacontatos.txt”,”w”)
arquivo.write(“Essa linha será escrita no arquivo.”)
arquivo.write(“Essa aqui já sera a segunda linha do arquivo.”)
arquivo.close()
arquivo = open(“C:Datacontatos.txt”,”r”)
for linha in arquivo:
print linha
33. Data Handling
O módulo e32dbm
“Banco de Dados” para Dispositivos Symbian
Tratamento semelhante ao de objetos File
Trata Dicionários
Gerencia arquivos maiores e mais rapidamente
e32dbm.open(DB_FILE, modo)
Modo pode ser:
r → Abre a DB pra leitura
w → Abre a DB para escrita
c → Leitura e Escrita (Se não existir, cria)
Se 'f' for colocado a frente do modo, as modificações no
banco ficam em memória até o close() do db
34. Data Handling
Exemplo
Import e32dbm
db = e32dbm.open(“C:Datadatabase.db”,”cf”)
db[“Nome”] = u”Flávio Ribeiro”
db[“Idade”] = 21
for key, value in db.items():
print “Chave: “, key
print “Valor:”, value
db.close()
35. Módulo responsável por informações do sistema
sysinfo.battery()
Retorna o nivel da bateria (entre 0 e 7)
sysinfo.imei()
Retorna o número de identificação do celular
sysinfo.active_profile()
Retorna o perfil utilizado no momento (Silencioso, Reunião,
etc)
sysinfo.display_pixels()
Retorna o tamanho da tela em pixels (muito importante)
Sysinfo
36. Módulo responsável por informações do sistema
sysinfo.free_drivespace()
Retorna o espaço livre em bytes em cada drive
{u'C:': 58463232, u'D:': 9494528, u'Z:': 0}
sysinfo.total_ram()
Retorna o tamanho da memória RAM
sysinfo.free_ram()
Retorna a memória RAM livre
sysinfo.signal_bars()
Retorna o sinal da antena (de 0 a 7)
sysinfo.sw_version()
Versão do firmware
Sysinfo
39. Jogos com Python
Exemplos de Jogos com Python
Frets on Fire
Civilization
Battlefield 2
InterZone
40. Jogos com Python
API's e Frameworks
PyGlet
PyOpenGL
Panda3D
Pygame
Mais popular (também mais difundida)
SDL (Simple DirectMedia Layer)
Sprites, Actions, Effects
Linux, Windows, Mac, XO-OLPC, Maemo, s60
41. Jogos com Python
Definições
Surface
Superfícies a serem desenhadas
2d ou 3d (transparência
Em memória ou placa de vídeo
Rect
Retângulos
Delimitam sprites
Display
Manipula a tela
pygame.display.flip()
Dirty Rect
42. Jogos com Python
Definições
Draw
Desenha no display
Linhas, Circulos, Polígonos
Event
Recupera eventos do Input (Teclado, Joystick)
Delimitam sprites
Clock
Define os frames por segundo
pygame.clock.tick()
43. Jogos com Python
Definições
Sprite
Agente ativo
pygame.sprite.Sprite e pygame.sprite.Group
Colisões
Comparação de retângulos dos sprites
Game Loop
Loop Infinito
Captura eventos do input
Trata os eventos
'Pinta' os sprites nas novas localizações
Atualiza a tela (flip() ou update())
50. Várias funções em um só arquivo
Arquivo: operacoes.py
Funções:
soma(x,y)
subtrai(x,y)
divide(x,y)
Namespace e Dicas de um projeto Python
import operacoes
operacoes.soma(10,20)
operacoes.divide(100,2)
51. Várias Classes em um só arquivo
Arquivo: funcionarios.py
Classes:
Presidente
Diretor
Estagiario
Namespace e Dicas de um projeto Python
import funcionarios
flavio = funcionarios.Estagiario()
lucas = funcionarios.Presidente()
flavio.trabalha()
lucas.toma_cafe()
Métodos
trabalha()
toma_cafe()
52. Várias Classes em um só arquivo (Exemplo II)
Arquivo: funcionarios.py
Classes:
Presidente
Diretor
Estagiario
Namespace e Dicas de um projeto Python
from funcionarios import *
flavio = Estagiario()
lucas = Presidente()
flavio.trabalha()
lucas.toma_cafe()
Métodos
trabalha()
toma_cafe()
53. Pacotes
Pasta: conexoes/
Arquivo __init__.py (vazio)
Arquivos:
bluetooth.py → Classes Server e Client
wireless.py → Classes AccessPoint e Client
Namespace e Dicas de um projeto Python
import conexoes.bluetooth
import conexoes.wireless
bt = conexoes.bluetooth.Client()
wifi = conexoes.wireless.AccessPoint()
54. Pacotes (Exemplo II)
Pasta: conexoes/
Arquivo __init__.py (vazio)
Arquivos:
bluetooth.py → Classes Server e Client
wireless.py → Classes AccessPoint e Client
Namespace e Dicas de um projeto Python
from conexoes import bluetooth
bt = bluetooth.Client()
55. Pacotes (Exemplo III)
Pasta: conexoes/
Arquivo __init__.py (vazio)
Arquivos:
bluetooth.py → Classes Server e Client
wireless.py → Classes AccessPoint e Client
Namespace e Dicas de um projeto Python
from conexoes.bluetooth import Server
bt = Server()
56. Dicas:
Crie uma pasta pra seu programa:
Deixe uma pasta do seu programa para os códigos (src)
Deixe outra pasta para Arquivos no geral (files)
Crie outras necessárias
Namespace e Dicas de um projeto Python
import os, os.path
PATH = u”C:DataMinhaAplicação”
if not os.path.exists(PATH): os.makedirs(PATH)
import os, os.path
Sources = u”C:DataMinhaAplicaçãosrc”
if not os.path.exists(Sources): os.makedirs(Sources)
57. Dicas:
Coloque a pasta de códigos no seu Python Path
Assim ele será visível e poderá ser incluído nos seus códigos.
Namespace e Dicas de um projeto Python
import sys
Sources = u”C:DataMinhaAplicaçãosrc”
sys.path.append(Sources)