BrythonでPath2Dオブジェクトを使う

Brythonでcanvasに描画をする場合、取得したcontextに直接描いていくほかに、Path2Dオブジェクトにサブパスを追加していってから最後に描くという方法がある(HTML5のcanvasを参照)。

BrythonにはPath2Dオブジェクトは実装されていないが、JavaScriptの組み込みクラスを扱う方法によって、Path2Dオブジェクトを使えるようになる。

 

 

BrythonでJavaScriptの組み込みクラスを使う

次の手順でBrythonからJavaScriptのクラスを直接使うことができる。JavaScript側の自作クラスをPythonで使う例はいくつか見かけたが、組込関数はどうかと思って試してみた。

  • browserモジュールからwindowオブジェクトをインポートする
  • JSConstructor()関数の引数にJavaScriptの組み込みクラスのコンストラクタを与えてPythonとしてのコンストラクタを得る
    • ()や引数はつけない
    • 引数に与えるJavaScriptのコンストラクタはwindowオブジェクトに属している
  • 上のコンストラクタを使ってインスタンスを生成

たとえばJavaScriptの組込クラスArrayを使ってみる。

Arrayオブジェクトをつくると、Pythonのリストとして生成されているらしい。メソッドも使えそう。

ところがtoString()メソッドを使おうとするとエラーに。

これを見ると、JavaScriptのコンストラクタを使っているが、Pythonではリストとして解釈されるので、メソッドが存在しない、とエラーになる。上のreverse()sort()は、JavaScriptのArrayクラスのメソッドではなく、Pythonのリストオブジェクトのメソッドとして解釈・実行されたということになる。

Pythonのクラスに定義されていないプロパティにアクセスした場合もエラーになる。

もともとBrythonに該当するものがないJavaScriptのクラスの場合。たとえばPath2Dをつくってみると、JSObjectでラップされたオブジェクトになっているらしい。

このPath2DオブジェクトのmoveTo()lineTo()といったメソッドは問題なく機能して、canvasに描画することができる。

 

Brython – 日時とタイマ

このページでは、Brythonの外部スクリプトファイルを読み込んで実行している。ページのロード後にその時の日時が表示され、下のボタンを押すたびに現在時刻が1秒間隔で表示され、またそれが停止する。

このページのHTML部分は以下の通りで、ボタンと表示部、スクリプト読み込みが主要部分。

外部スクリプトの内容は以下の通り。global変数は使わず、timerを保持・表示するクラスを関数の引数に渡している。

また、timer.set_interval()の引数に関数を渡す際、インスタンスメソッドを渡すこともできる。

Brythonでのタイマの使い方についてはこちらを参照。

Brythonの開発環境

概要

Brythonの開発環境については、Brython Documentationの”Development Environment“で説明されている。

開発環境のダウンロードと解凍

まず、開発環境のzipファイルをダウンロードする。ファイルは”BrythonX.Y.Z_site_mirror”で、X.Y.Zはバージョン番号。

ダウンロードしたファイルをディレクトリ下に解凍する。以下、このディレクトリを”brython_directory”とする。

サーバの起動・終了

Brythonをローカル環境で開発するため、ローカルサーバを起動する。サーバはPythonでつくられていて、その場所はbrython_directory直下、ファイル名はserver.py。

brython_directoryで、コンソールからpython server.pyと打つとポート8000でローカルサーバが動き出す。

起動時の--portオプション指定で8000以外のポートを割り当てることも可能。

サーバの終了は、サーバが稼働中のコンソールで[CTRL-C]

ファイルの配置と呼び出し

開発するBrythonを呼び出すHTMLファイルを置く場所は、brython_directory/wwwの下に任意のディレクトリを作成して配置。

たとえばbrython_directory/www/brython_test/index.htmlなど。

ブラウザからこのファイルを読みに行く場合は”http://localhost:8000/brython_test/index.html”とする。

 

WordPressでのBrythonの扱い方

注意点

WordPressでBrythonを使うとき、以下の点に気を付けなければならない。

  1. brython.jsを読み込むのはheadセクションだが、カスタムセクションにこれを書くなど、WordPressとしての扱いが必要
  2. onload時にbrython()を実行させる処理が必要
  3. スクリプトをHTML内に直接書くときに、WordPressのエディタの仕様が問題になる(勝手に<p>タグがつけられる)。

Brythonの読み込み

通常はHTMLドキュメントのheadセクションでbrython.jsを読み込むが、WordPressの場合は別途処理しなければならない。

このページでは、Custom CSS and JavaScriptでターゲットを指定している。

onload時の処理

<body>タグがPHPに含まれているので触り難いが、以下のようなjavascriptファイルをheadセクションで読み込んでおけば、onload時に関数が呼ばれてbrython()が実行される(WordPressでのonload処理を参照)。

このページでは、上記ファイルをonload_brython.jsとしてサーバ上に置き、先のBrythonの読み込みの後に、Custom CSS and JavaScriptで読み込んでいる。

スクリプトを直接書く時の注意

Brythonを展開するのに、直接HTMLファイルにスクリプトを書く方法と、外部スクリプトファイルに分ける方法の2つがあるのは他のスクリプトと同じ。

ただしWordPressのエディタのテキストモードでスクリプトをHTML内に直接書く場合、スクリプト中に空行があると勝手に<p>タグが挿入されるので、実行時にエラーとなる。<p>タグを付加するのを抑制するか、あるいは空行なしで書けば正常に実行される。

以下の例は、このページ中に直接Brythonのスクリプトを書いたもの。

あるいは下の例のように、スクリプトを外部ファイルにすれば、問題なく実行される。