では実際に、以下の資料を参考に Sugar アプリケーション (activity) を作ってゆきます。
作業の流れ
- glade でガワを作る。
- python で中身を作る。
- Sugar との糊付けコードや設定ファイルなどを書く
- インストール
activity とは、ソフトウェアの実行に必要なひとまとまりのファイルを集めた物です。activity には、システムに最初から入ってるやつと、ユーザが後から入れるやつがあります。普通の linux アプリと違う所は、activity がどんなディレクトリにあってもちゃんと動くように作らないといけない所です。完成した暁には次のようなファイルが出来ているはずです。
- GtkhelloActivity/MANIFEST - ファイルのリスト
- GtkhelloActivity/gtkhello.py - 本体
- GtkhelloActivity/gtkhello.glade - GUI 定義ファイル
- GtkhelloActivity/GtkhelloActivity.py - エントリポイント
- GtkhelloActivity/setup.py - インストールスクリプト
- GtkhelloActivity/activity/activity.info - activity 設定ファイル
- GtkhelloActivity/activity/gtkhello.svg - アイコン
glade でガワを作る。
python で中身を作る。
本体である gtkhello.py の内容はこんな感じです。
#!/usr/bin/env python import os import sys import pygtk pygtk.require("2.0") import gtk import gtk.glade from sugar.activity import activity class gtkhello: def __init__(self): gladename = os.path.join(activity.get_bundle_path(), 'gtkhello.glade') self.wTree = gtk.glade.XML(gladename, 'vbox1') self.vbox = self.wTree.get_widget('vbox1') self.text = self.wTree.get_widget('entry1') self.wTree.signal_autoconnect(self) def on_button1_clicked(self, widget): self.text.set_text("Hello World!") if __name__ == "__main__": os.environ['SUGAR_BUNDLE_PATH'] = '.' window = gtk.Window() window.connect("destroy", gtk.main_quit) hwg = gtkhello() window.add(hwg.vbox) window.show() gtk.main()
ポイント
- gtk.glade.XML で GUI 部品を取り出すとき、ウインドウは省略して vbox1 以下だけ取り出す。ウインドウは suar から提供されるからです。
- if __name__ を使って、sugar 環境の外からでもテスト出来るようにしておきます。
以下のようにしてテストが出来ます。
$ (path_to_sugar)/sugar-jhbuild/sugar-jhbuild shell # 環境変数の設定 $ ./gtkhello.py
Sugar との糊付けコードや設定ファイルなどを書く
エントリポイント GtkhelloActivity.py はこんな感じ Gtkhello の vbox を sugar に与えられたウインドウに追加するだけです。
from sugar.activity import activity from gtkhello import gtkhello class GtkhelloActivity(activity.Activity): def __init__(self, handle): activity.Activity.__init__(self, handle) self.set_title('Gtk Hello world') hello = gtkhello() self.add(hello.vbox)
あと、setup.py と言うのも必要みたいです。
from sugar.activity import bundlebuilder bundlebuilder.start()
activity ディレクトリには、設定ファイルとアイコンが必要です。アイコンは適当にコピペしてくるとして、activity.info の方は
[Activity] name = Gtkhello id = org.metatoys.Gtkhello service_name = org.metatoys.propella.Gtkhello class = GtkhelloActivity.GtkhelloActivity icon = gtkhello show_launcher = yes activity_version = 1 host_version = 1
最後に MANIFEST を書きます。ここに書いた物と + activity/ が、パッケージの対象になります。
gtkhello.glade gtkhello.py gtkhelloActivity.py