×
Namespaces

Variants
Actions

Archived:Desenvolvimento de Aplicações PySymbian para Maemo

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)


Article Metadata

Artigo
Criado por User:Raulherbster em 30 Apr 2008
Última alteração feita por hamishwillee em 07 May 2013

Contents

Iniciando o desenvolvimento Python para Maemo 4.x

Este tutorial explica como desenvolver aplicações Python para a plataforma Maemo 4.x. Para entender o documento, é necessário um conhecimento prévio da arquitetura maemo. Este artigo é dividido em:

  • Ambiente de desenvolvimento Python e como configurá-lo na plataforma Maemo 4.x
  • Codificando aplicações Python com UI para Maemo 4.x

Ambiente de desenvolvimento Python para Maemo 4.x

PyMaemo é o suporte oferecido pela plataforma Maemo à linguagem de programação Python. Desenvolvida desde 2004 pelo Instituto Nokia de Tecnologia (INdT), PyMaemo possui um tamanho menor e também implementa um conjunto de otimizações necessárias para obter melhorias de performance para dispositivos baseados na plataforma Maemo. Também provê módulos importantes para a plataforma, por exemplo BlueZ, GStreamer, Hildon e GTK+.

Dessa forma, além do suporte à linguagem de programação C, a plataforma Maemo também provê suporte a uma outra linguagem de programação para o desenvolvimento de aplicações interessantes. Python é uma opção versátil é poderosa: é possível o desenvolvimento de aplicações sofisticadas, tal como Canola, e também protótipos de software.

PyMaemo possui os seguintes módulos: iPython, PyBlueZ, PyGame, PyGconf, PyGnomeVFS, PyGobject, PyGtk, Pyid3lib, PyImage, Pyrex, Python, Python-dbus, PythonGPS-bt, Python-Gstreamer, Python-Hildon, Python-Numeric, Python-Osso, Python-Xml, Python-ABook, Evolution-python, Galago-python, PyC URL, Cython e Storm. Visite PyMaemo para maiores informações sobre o PyMaemo

Configurando o ambiente de desenvolvimento

O primeiro passo é configurar e testar o ambiente de desenvolvimento Maemo. Para maiores detalhes, leia este tutorial. Após instalar o ambiente de desenvolvimento Maemo, haverá duas targets diferentes: ARMEL, usada para emular aplicações para plataformas baseadas na arquitetura armel, e X86. Em ambas, as bibliotecas Python não estão instaladas originalmente. É necessário instalar o PyMaemo e os módulos desejados. Execute o comando apt-get para instalar o pacote python2.5-sdk e todas as suas dependências, incluindo os módulos.

[sbox-CHINOOK_X86: ~] > apt-get install python2.5-sdk
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
libsdl-ttf2.0-0 python2.5 python2.5-bluez python2.5-bluez-dev python2.5-cairo python2.5-cairo-dev python2.5-conic python2.5-conic-dev python2.5-dbus python2.5-dev
python2.5-gnome python2.5-gnome-dev python2.5-gobject python2.5-gobject-dev python2.5-gstreamer python2.5-gstreamer-dev python2.5-gtk2 python2.5-gtk2-dev python2.5-hildon
python2.5-hildon-dev python2.5-id3lib python2.5-imaging python2.5-numeric python2.5-numeric-dev python2.5-osso python2.5-osso-dev python2.5-pygame python2.5-runtime
python2.5-setuptools python2.5-xml python2.5-xml-dev
The following NEW packages will be installed:
libsdl-ttf2.0-0 python2.5-bluez python2.5-bluez-dev python2.5-cairo-dev python2.5-conic python2.5-conic-dev python2.5-dbus python2.5-dev python2.5-gnome python2.5-gnome-dev
python2.5-gobject-dev python2.5-gstreamer python2.5-gstreamer-dev python2.5-gtk2-dev python2.5-hildon-dev python2.5-id3lib python2.5-imaging python2.5-numeric-dev
python2.5-osso python2.5-osso-dev python2.5-pygame python2.5-runtime python2.5-sdk python2.5-setuptools python2.5-xml python2.5-xml-dev
The following packages will be upgraded:
python2.5 python2.5-cairo python2.5-gobject python2.5-gtk2 python2.5-hildon python2.5-numeric
6 upgraded, 26 newly installed, 0 to remove and 3 not upgraded.
Need to get 11.1MB/11.7MB of archives.
After unpacking 34.6MB of additional disk space will be used.
Do you want to continue [Y/n]? Y
...

Após instalar o ambiente, podemos iniciar o desenvolvimento de aplicações Python.

Codificando aplicações Python com UI para Maemo 4.x

Essa seção explica como utilizar a linguagem Python para desenvolver aplicações na plataforma Maemo 4.x. Iniciamos com uma aplicação GTK+ simples que apenas cria e mostra uma janela com o texto "Hello World". Um evento para "destruir" a janela e sair da aplicação é gerado sempre que a janela é fechada.

import gtk
if __name__ == "__main__":
window = gtk.Window(gtk.WINDOW_TOPLEVEL)

label = gtk.Label("Hello World!")
window.add(label)

label.show()
window.show()

gtk.main()     

Criamos uma janela GTK (gtk.Window(gtk.WINDOW_TOPLEVEL)) que pode conter outros widgets. Depois, criamos um label GTK e o adicionamos à janela. Finalmente, mostramos ambos label e janela. O metodo gtk.main() é invocado para iniciar o laço principal da GUI. Este é o comando para executar a aplicação:

[sbox-CHINOOK_X86: ~] >python2.5 ./hello_world.py

Hello World com widgets GTK

A aplicação executa normalmente. Entretanto, não parece com uma aplicação com o tema Hildon. O background é escuro e as fontes são pequenas, por exemplo. É necessário executar a aplicação usando um script utilitário que modifica para o look-and-fell correto: run-standalone.sh. Agora, modificando um pouco o comando de execução, temos:

[sbox-CHINOOK_X86: ~] >run-standalone.sh python2.5 ./hello_world.py

Hello World com widgets GTK

Contudo, lembre-se: o script run-standalone.sh está disponível somente no ambiente Scratchbox com o Maemo SDK instalado ou em um Internet Tablet.

Agora, adicionaremos um menu em nossa aplicação. A função create_menu cria um menu e o retorna como resultado. Logo após, declaramos um gtk.Menu, adicionamos alguns gtk.MenuItems a ele e finalmente o adicionamos em um gtk.MenuBar. Finalmente, instanciamos um container box para adicionar o gtk.Label e o gtk.MenuBar criados anteriormente.

import gtk

class HelloWorldApp:

 def __init__(self):
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)    
  
     menu_bar = self.create_menu()
     label = gtk.Label("Hello World!")
  
     vbox = gtk.VBox(False, 0)
     vbox.pack_start(menu_bar, False, False, 0)
     vbox.pack_start(label, False, False, 0)
  
     self.window.add(vbox)     

 def create_menu(self):
     menu = gtk.Menu()
  
     menuItemOpen = gtk.MenuItem("Open")
     menuItemSave = gtk.MenuItem("Save")
     menuItemSeparator = gtk.SeparatorMenuItem()
     menuItemExit = gtk.MenuItem("Exit")
  
     menu.append(menuItemOpen)
     menu.append(menuItemSave)
     menu.append(menuItemSeparator)
     menu.append(menuItemExit)
  
     menuItemFile = gtk.MenuItem("File")
     menuItemFile.set_submenu(menu)
  
     menu_bar = gtk.MenuBar()
     menu_bar.append(menuItemFile)
  
     return menu_bar

 def run(self):     
     self.window.show_all()
     gtk.main()

if __name__ == "__main__":
 app = HelloWorldApp()
 app.run()  

Adicionando um menu GTK

Há algo errado com a posição do menu: sua localização correta é na barra de título da janela. Lembre-se que os widgets Hildon não estão sendo utilizados, portanto, alguns elementos podem estar incorretamente desenhados. A plataforma contem um conjunto de widgets que são otimizados para dispositivos com limitações de interface com o usuário e com uma tela sensível ao toque. Para uma melhor integração da sua aplicação com o ambiente, é necessário remover os widgets GTK e utilizar os elementos esperados para uma aplicação Hildon. Há dois widgets importantes disponibilizados pela API Hildon: o Hildon Program e o Hildon Window, os quais substituem algumas das funcionalidades providas pela gtk.Window.

import gtk
import hildon

class HelloWorldApp(hildon.Program):

  def __init__(self):
      hildon.Program.__init__(self)

      self.window = hildon.Window()
      self.window.connect("delete_event", quit)
      self.add_window(self.window)    
   
      menu_bar = self.create_menu()
      label = gtk.Label("Hello World!")
   
      self.window.set_menu(menu_bar)
      self.window.add(label)       

  def quit(self, *args): 
      gtk.main_quit()

  def create_menu(self):
      menu = gtk.Menu()
   
      menuItemOpen = gtk.MenuItem("Open")
      menuItemSave = gtk.MenuItem("Save")
      menuItemSeparator = gtk.SeparatorMenuItem()
      menuItemExit = gtk.MenuItem("Exit")
   
      menu.append(menuItemOpen)
      menu.append(menuItemSave)
      menu.append(menuItemSeparator)
      menu.append(menuItemExit)
          
      return menu

  def run(self):     
      self.window.show_all()
      gtk.main()

if __name__ == "__main__":
  app = HelloWorldApp()
  app.run()  

Adding GTK menu and using Hildon widgets

Agora, o menu está corretamente posicionado como o esperado para uma aplicação Hildon. Foram necessárias algumas pequenas mudanças: tivemos que criar um hildon.Program e um hildon.Window. A classe hildon.Window possui um método bastante útil para definir o menu da janela (set_menu(gtk.Menu)), assim, o container vbox não é mais necessário.

This page was last modified on 7 May 2013, at 14:24.
70 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×