Este documento fornece uma revisão sobre aplicações móveis e jogos com Python para S60. Ele discute tópicos como formulários, guias, bluetooth, rede e câmera. Também fornece dicas sobre organização de projetos Python para S60.
2. Review
3ª Aula
Mais appuifw
Title, body, menus
Teclado
Graphics e Canvas
Data Handling
Um pouco de jogos :-)
3. Pra Hoje...
4ª Aula
Fim do Appuifw
Forms e tabs
Exercícios
Bluetooth
Networking
Camera
O módulo sysinfo
Dicas de um Projeto
Definição dos grupos e Projetos
5. Appuifw.Form
appuifw.Form
Objeto de formulários da s60
Recebe no construtor uma lista de tuplas e
seu tipo de edição.
(nome,tipo[,valor default])
Nome é um unicode
Tipo pode ser:
'text'
'number'
'date'
'time'
'combo'
'float'
6. Appuifw.Form
appuifw.Form
Objeto de formulários da s60
Tem os seguintes atributos
Flags
FFormEditModeOnly – Aceita edição
FFormViewModeOnly – Não aceita edição
Menu
Recebe uma lista de tuplas (titulo, callback)
Callback é uma referencia a função
Titulo é um unicode
7. Appuifw.Form
appuifw.Form
Objeto de formulários da s60
Tem os seguintes Métodos
Execute()
Apresenta a Form na UI
insert()
Insere itens ao Form
Pop() e length()
save_hook()
10. PyS60 – Exercício 1
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.
11. PyS60 – Exercício 2
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.
12. PyS60 – Exercício 3
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).
17. RFCOMM (Radio Frequency COMMunication)
Protocolo Bluetooth para transmissão (RX e TX) de texto ou
raw data
Bluetooth
18. RFCOMM (Radio Frequency COMMunication)
Protocolo Bluetooth para transmissão (RX e TX) de texto ou
raw data
Para scan de dispositivos RFCOMM:
Bluetooth
import socket
endereco, servicos = socket.bt_discover()
print endereco,servicos
20. Bluetooth
Fazendo um CHAT – Lado Cliente
def chat_client():
conn = socket.socket(socket.AF_BT, socket.SOCK_STREAM)
address, services = socket.bt_discover()
if 'NossoChat' in services:
channel = services[u'btchat']
conn.connect((address, channel))
appuifw.note(u”Conectado!”)
talk(None, conn)
else:
appuifw.note(u"O celular não está rodando o chat.", "error")
21. Bluetooth
Fazendo um CHAT – Comum
def receive_msg(fd):
print "Esperando a mensagem.."
reply = fd.readline()
print "Recebido: " + reply
appuifw.note(unicode(reply), "info")
def send_msg(fd):
msg = appuifw.query(u"Envie:", "text")
print "Enviado: " + msg
print >> fd, msg
def talk(client, server):
try:
if server:
fd = server.makefile("rw", 0)
receive_msg(fd)
if client:
fd = client.makefile("rw", 0)
while True:
send_msg(fd)
receive_msg(fd
except:
appuifw.note(u"Desconectou",
"info")
if client: client.close()
if server: server.close()
index = appuifw.popup_menu([u"Servir",
u"Conectar"])
if index != None:
if index:
chat_client()
else:
chat_server()
34. 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
35. 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
37. 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)
38. 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()
39. 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()
40. 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()
41. 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()
42. 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()
43. 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)
44. 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)