Py4A czyli piszemy aplikację na androida.

Jak obiecałem jest to krótki opis w jaki sposób zmajstrować aplikację z prostym GUI napisaną w pythonie na androida. Py4A ma wiele funkcji ale niestety brakuje mu dostępu do podstawowych funkcji do tworzenia interfejsów dla androida. Konieczne jest posiłkowanie się WebView czyli htmlem oraz javascriptem. Jeśli nadal jesteś chętny to czytaj dalej.

Muszę zaznaczyć na samym początku artykułu, że kod nie jest doskonały a sam przykład nie jest może do końca przemyślany. Należy to traktować jako wstęp do swoich aplikacji i drogowskaz. Jeśli ktoś ma uwagi odnośnie kodu to proszę bardzo jednak dużo bardziej jestem zainteresowany innymi sposobami użycia pythona na androidzie. Kod sam w sobie nie wykonuje żadnych skomplikowanych operacji na sprzęcie, pomimo że API to umożliwia, jak już pisałem przykład nie jest do końca przemyślany a moim celem było tylko pokazanie, że aplikacje mogą posiadać interfejs a nie być po prostu skryptami. Koniec biadolenia, przechodzimy do mięska.
Najskromniejsza z aplikacji to tak naprawdę dwa pliki. Py który zawiera kod, mechanikę, funkcje itd. oraz html czyli interfejs. Python zaakceptuje wszystko pod warunkiem oczywiście, że są odpowiednie moduły. Html natomiast przyjmie js oraz css więc daje duże możliwości.
Oto plik .py, opiszę poszczególne fragmenty.

import android

droid = android.Android()
droid.webViewShow('file:///sdcard/sl4a/scripts/gasoline_ui.html')
while True:
    dist = droid.eventWaitFor('dist').result['data']
    gas = droid.eventWaitFor('gas').result['data']
    res = float(gas) / float(dist) * 100
    droid.dialogCreateAlert('Wynik kalkulacji', 'Spalanie: %s' % res)
    droid.dialogSetNeutralButtonText("Ok")
    droid.dialogShow()
    result = droid.dialogGetResponse().result
    droid.dialogDismiss()

Początek jest na tyle prosty, że nie ma co pisać. W pętli dzieje się cała mechanika, python czeka w niej na zdarzenia uruchamiane przez użytkownika w wymienionym wcześniej pliku html (o nim później). Wartości przypisywane są do odpowiednich zmiennych a potem wynik jest wypluwany w formie okna dialogowego. Żadnych trudności, wszystko proste i przyjemne.
A teraz plik html.

<html>
  <head>
    <link type="text/css" rel="stylesheet" href="/test.css">
    <title>Kalkulator spalania</title>
    <script>
      var droid = new Android();

      var calc = function() {
      var dist = document.getElementById('dist').value;
      var gas = document.getElementById('gas').value;
      droid.eventPost("dist", dist);
      droid.eventPost("gas", gas);
      };
    </script>
  </head>
  <body>
    <form onsubmit="calc(); return false;">
      <label for="dist">Ile przejechałeś?</label>
      <input type="text" id="dist" />
      <br />
      <label for="gas">Ile zatankowałeś?</label>
      <input type="text" id="gas" />
      <input type="submit" value="Calc" />
    </form>
  </body>
</html>

Najważniejszą częścią tego pliku jest javascript, który również tworzy obiekt API i poprzez jego metody komunikuje się z pythonem, odpowiedzialna jest za to funkcja eventPost(). Nie jest to zbyt skomplkowane. Jak już ma oba pliki to najlepiej je popchnąć na urządzenie używając adb (rozważam opisanie instalacji i konfiguracji w osobnym poście) poleceniem

adb push plik.py /sdcard/sl4a/scripts/
adb push plik.html /sdcard/sl4a/scripts/

Po tej operacji SL4A umożliwi odpalenie programu z listy skryptów.


Nie jest to piękne rozwiązanie ale umożliwia to zabawę pythonem, do czasu aż API nie będzie wspierać natywnych okienek lub nie pojawi się PyQT lub PyGTK trzeba będzie tak pisać lub przerzucić się na javę.

Posted in android, python and tagged , . Bookmark the permalink. RSS feed for this post. Leave a trackback.

8 Responses to Py4A czyli piszemy aplikację na androida.

  1. klaster says:

    nie ma takiej aplikacji w markecie, brak informacji wogole z kad ja pobrac. Jakos leciwy ten art

  2. człowiek says:

    nie musi być w android market może na android polska jest albo gdzie indziej

  3. Michał says:

    Jaki artykuł Wy komentujecie? Czytanie ze zrozumieniem kuleje w narodzie.

  4. movena says:

    Jakbyście poświęcili chwilę, aby poszukać poprzedniego artykułu, gdzie jasno jest wyjaśnione, że wszystko jest na stronie pythona, to nie śmiecilibyście shutboxa… Bo o kant dupy sobie rozbić takie czytanie ze zrozumieniem, skoro tacy amatorzy chodzą po świecie… Wogóle to wielkie dzięki dla autora tego postu, ponieważ bardzo mi Pomogłeś. Chwała Ci Pana ;-)

  5. Movena says:

    Ok. A jak myślisz czy można dograć pliki bibliotek do Py4A z Pythona na Windowsa?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Swedish Greys - a WordPress theme from Nordic Themepark.

Performance Optimization WordPress Plugins by W3 EDGE