Brythonでcanvasに描画をする場合、取得したcontextに直接描いていくほかに、Path2Dオブジェクトにサブパスを追加していってから最後に描くという方法がある(HTML5のcanvasを参照)。
BrythonにはPath2Dオブジェクトは実装されていないが、JavaScriptの組み込みクラスを扱う方法によって、Path2Dオブジェクトを使えるようになる。
Brythonでcanvasに描画をする場合、取得したcontextに直接描いていくほかに、Path2Dオブジェクトにサブパスを追加していってから最後に描くという方法がある(HTML5のcanvasを参照)。
BrythonにはPath2Dオブジェクトは実装されていないが、JavaScriptの組み込みクラスを扱う方法によって、Path2Dオブジェクトを使えるようになる。
次の手順でBrythonからJavaScriptのクラスを直接使うことができる。JavaScript側の自作クラスをPythonで使う例はいくつか見かけたが、組込関数はどうかと思って試してみた。
たとえばJavaScriptの組込クラスArrayを使ってみる。
Arrayオブジェクトをつくると、Pythonのリストとして生成されているらしい。メソッドも使えそう。
ところがtoString()メソッドを使おうとするとエラーに。
これを見ると、JavaScriptのコンストラクタを使っているが、Pythonではリストとして解釈されるので、メソッドが存在しない、とエラーになる。上のreverse()
やsort()
は、JavaScriptのArrayクラスのメソッドではなく、Pythonのリストオブジェクトのメソッドとして解釈・実行されたということになる。
Pythonのクラスに定義されていないプロパティにアクセスした場合もエラーになる。
もともとBrythonに該当するものがないJavaScriptのクラスの場合。たとえばPath2Dをつくってみると、JSObjectでラップされたオブジェクトになっているらしい。
このPath2DオブジェクトのmoveTo()
やlineTo()
といったメソッドは問題なく機能して、canvasに描画することができる。
このページでは、Brythonの外部スクリプトファイルを読み込んで実行している。ページのロード後にその時の日時が表示され、下のボタンを押すたびに現在時刻が1秒間隔で表示され、またそれが停止する。
このページのHTML部分は以下の通りで、ボタンと表示部、スクリプト読み込みが主要部分。
外部スクリプトの内容は以下の通り。global変数は使わず、timerを保持・表示するクラスを関数の引数に渡している。
また、timer.set_interval()
の引数に関数を渡す際、インスタンスメソッドを渡すこともできる。
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を使うとき、以下の点に気を付けなければならない。
head
セクションだが、カスタムセクションにこれを書くなど、WordPressとしての扱いが必要brython()
を実行させる処理が必要<p>
タグがつけられる)。通常はHTMLドキュメントのheadセクションでbrython.jsを読み込むが、WordPressの場合は別途処理しなければならない。
このページでは、Custom CSS and JavaScriptでターゲットを指定している。
<body>
タグがPHPに含まれているので触り難いが、以下のようなjavascriptファイルをheadセクションで読み込んでおけば、onload時に関数が呼ばれてbrython()
が実行される(WordPressでのonload処理を参照)。
このページでは、上記ファイルをonload_brython.js
としてサーバ上に置き、先のBrythonの読み込みの後に、Custom CSS and JavaScriptで読み込んでいる。
Brythonを展開するのに、直接HTMLファイルにスクリプトを書く方法と、外部スクリプトファイルに分ける方法の2つがあるのは他のスクリプトと同じ。
ただしWordPressのエディタのテキストモードでスクリプトをHTML内に直接書く場合、スクリプト中に空行があると勝手に<p>
タグが挿入されるので、実行時にエラーとなる。<p>タグを付加するのを抑制するか、あるいは空行なしで書けば正常に実行される。
以下の例は、このページ中に直接Brythonのスクリプトを書いたもの。
あるいは下の例のように、スクリプトを外部ファイルにすれば、問題なく実行される。