Python

De openmoko-fr.

Python est un langage interprété très utilisé dans l'Openmoko. Outre sa simplicité, il a pour avantage le fait que l'on puisse directement développer sur le téléphone sans passer par une phase de compilation.

Nous allons essayer dans ces quelques lignes de vous présenter comme créer simplement une application graphique à l'aide de ce langage.

Python permet d'interagir simplement avec le framework de l'Openmoko via FSO, nous verrons cela plus tard ...


Sommaire

Exemples EFL

Hello World

#!/usr/bin/python

import etk

#création d'un bouton (not yet on any window)
b = etk.Button(label="Hello")

#création d'une fenêtre (non visible) dans laquelle nous allons placer le bouton
w = etk.Window(title="Hello", child=b)

#création d'une fonction simple de callback
def hello(target):
  print 'Hello World'
  etk.main_quit()

#liaison du bouton sur la fonction de callback
b.on_clicked(hello)

#Affichage de la fenêtre
w.show_all()

#gestion des évenements
etk.main()

D'autres exemples sont disponible ici

Exemples Elementary (SHR)

HelloWorld

#!/usr/bin/python

import elementary

#creation d'une fonction simple de callback
def destroy(target, arg2):
  print 'Byebye'
  elementary.exit()

elementary.init()
win = elementary.Window("settingsMods", elementary.ELM_WIN_BASIC)
win.destroy = destroy
win.title_set("HelloWorld")


#creation d'une fonction simple de callback
def hello(arg1, arg2):
  print 'Helloworld'
  elementary.exit()

frame = elementary.Frame(win)
frame.label_set("HelloWorld")
frame.show()

bg = elementary.Background(win)
win.resize_object_add(bg)
bg.size_hint_weight_set(1.0, 1.0)
bg.show()


box0 = elementary.Box(win)
box0.size_hint_weight_set(1.0, 1.0)
win.resize_object_add(box0)
box0.show()

bt = elementary.Button(win)
bt.label_set("HelloWorld")
bt.clicked = hello
bt.size_hint_align_set(-1.0, 0.0)
bt.show()

box0.pack_end(frame)
box0.pack_end(bt)

win.show()
elementary.run()


Problèmes divers

Module not found

Alors que tous les paquets sont bien installés, au lancement de votre programme vous avez le message suivant qui s'affiche :

root@om-gta02:~# helloworld 
Traceback (most recent call last):
  File "/usr/bin/helloworld", line 4, in <module>
    import etk
ImportError: No module named etk

C'est certainement que comme dans mon cas, le module est installé pour python2.5 alors que c'est python2.6 qui est exécuté. Pour y remédier, une solution (pas forcément très clean) est d'utiliser les modules de la 2.5 pour la 2.6 :

ln -s /usr/lib/python2.5/site-packages/etk /usr/lib/python2.6/site-packages/

Faire de même avec tous les modules manquants

Outils personnels