NodeBox on Jython なソフト「NodeJythox」を作ってみた

公開日: : Python

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

NodeBoxのソースコードを読んでいたら、こんなコードを発見。


def run(self, source_or_code):
self._initNamespace()
if isinstance(source_or_code, basestring):
source_or_code = compile(source_or_code + "\n\n", "<Untitled>", "exec")
exec source_or_code in self.namespace
if self._check_animation():
if self.namespace.has_key('setup'):
self.namespace['setup']()
self.namespace['draw']()

更にこんなコードも。


def rect(self, x, y, width, height, roundness=0.0, draw=True, **kwargs):
BezierPath.checkKwargs(kwargs)
if roundness == 0: p = self.BezierPath(**kwargs)
p.rect(x, y, width, height)
else:
curve = min(width*roundness, height*roundness)
p = self.BezierPath(**kwargs)
p.moveto(x, y+curve)
p.curveto(x, y, x, y, x+curve, y)
p.lineto(x+width-curve, y)
p.curveto(x+width, y, x+width, y, x+width, y+curve)
p.lineto(x+width, y+height-curve)
p.curveto(x+width, y+height, x+width, y+height, x+width-curve, y+height)
p.lineto(x+curve, y+height)
p.curveto(x, y+height, x, y+height, x, y+height-curve)
p.closepath()
p.inheritFromContext(kwargs.keys())

「あれ?じゃあJython上で動作するNodeBoxって、案外簡単に作れるんじゃないの?」

今までNodeBoxのソースコードを眺めながらNodeBox for Jythonなんてものを思い描いていたけど、設計を練っているだけで、実際にコードを書き出すキッカケがなかった。今がそのキッカケなのかもしれない。時計を見ると22:30。

「よし、24:00までにNodeBox on Jythonを作ってやるぜ!!」

ってことで、Jython (一人)Hackathon開始!!

Jython

ひとまずJythonを入れる。


% which jython
jython not found
% port search jython
jython lang/jython 2.1 Python implementation in pure Java
% sudo port install jython
% which jython
/opt/local/bin/jython

この状態で jython 自体は動くんだけど、jython hogehoge.py とかしても、対話モードに入ってしまう。仕方がないので、MacPortを使用せずにインストール。


% wget http://downloads.sourceforge.net/jython/jython_installer-2.2.1.jar
% java -jar jython_installer-2.2.1.jar

できた!!

んで、Swingなどと格闘すること、1時間ちょい。

「できた!!」

http://farm4.static.flickr.com/3088/2318064023_b231b7065d.jpg

時計を見ると、23:56。ギリギリセーフ!!ウィンドウの見た目とか、oval()にしか対応してないとか、まだまだ微妙だけど、0.0.1ってことで。

ソース

以下、ソース。近々 CodeRepos あたりにアップします。


from pawt import swing
import java

def exit(e): java.lang.System.exit(0)

def run(e):
source_or_code = compile(tacode.getText() + "\n\n", "<Untitled>", "exec")
exec source_or_code

def nbprint(p):
s = "%d" % p
taconsole.append(s)
taconsole.append("\n")

def oval(x, y, w, h):
tacanvas.graphics.drawOval(x,y,w,h)

frame = swing.JFrame('Swing Example', visible = 1)
button = swing.JButton('Run!!', actionPerformed = run)
tacanvas = swing.JTextArea(5,10)
tacanvas = swing.JPanel()
tacanvas.setPreferredSize(java.awt.Dimension(320, 320));

tacode = swing.JTextArea(5,10)

taconsole = swing.JTextArea(5,10)

p = swing.JPanel();
p.setLayout(java.awt.BorderLayout());

p.add(button, java.awt.BorderLayout.PAGE_START)
p.add(tacanvas, java.awt.BorderLayout.LINE_START)
p.add(tacode, java.awt.BorderLayout.LINE_END)
p.add(taconsole, java.awt.BorderLayout.PAGE_END)

frame.contentPane.add(p, java.awt.BorderLayout.CENTER)

frame.pack()

関連記事

サンフランシスコのピア39にあるチャウダーズでクラムチャウダーを食す!

lolipop アップルの開発者向けイベント「WWDC2014」

ミスドのカルピスドーナツとカルピスポンデリングを食べてみた!

ミスドで期間限定のカルピスコラボ商品「カルピスドーナツ」と「カルピ

十三カレー計画で牛すじカレーネギのせを食す!(大阪・十三)

「iPhoneアプリ開発キャンプ@大阪」のランチで、十三カレー計画

大阪・難波の加寿屋 法善寺でかすうどんを食す。ランチタイムはおにぎり2個まで無料!

大阪・難波の加寿屋 法善寺 (かすうどん KASUYA)で、かす

ライブドアブログで運営していた「あきお商店」を「卵は世界である」に改名しました

少し前からライブドアブログで「あきお商店」というブログをやって

→もっと見る

PAGE TOP ↑