始める前に http://qiita.com/tom-u/items/134e2b8d4e11feea8e12 の通りに環境を整える。
ごく普通の Python で HelloWorld はこう書く。
# -*- coding: utf-8 -*-
print('Hello Python')
実行はターミナルからこう。
$ python HelloWorld.py
PyObjC らしい出力は NSLog
を使用する。実行方法は同様に。
# -*- coding: utf-8 -*-
print('Hello Python')
from Foundation import NSLog
NSLog('Hello Python')
NSLog
はタイムスタンプ付きで標準出力する。
さらに PyObjC らしく GUI ダイアログでメッセージ表示。NSAlert
を使用する。
# -*- coding: utf-8 -*-
print('Hello Python')
from Foundation import NSLog
NSLog('Hello Python')
from AppKit import NSAlert
alert = NSAlert.alloc().init()
alert.setMessageText_('Hello Python')
alert.runModal()
もっと PyObjC らしくウィンドウで、と行きたくなるが イベント駆動型プログラミング(英: Event-driven programming)
を学ぶ事に繋がるので、しばらくはこのまま 手続き型プログラミング(英: Procedural programming)
で。
ターミナルからの実行だけでなくファインダーからの実行を可能にする為に py2app
で Python コードを Mac アプリ化する。
$ py2applet --make-setup HelloWorld.py && python setup.py py2app --alias
上記を実行すると ./dist/HelloWorld.app
が作成されて、通常の Mac アプリ同様にファインダー上から実行が可能になる。
python setup.py py2app --alias
の --alias
は開発向きのオプションで、HelloWorld.py を変更後に再ビルドの必要なくコードが反映される。試しに以下の通りにコードを変更して HelloWorld.app をそのままに実行すると変更が確認できる。
# -*- coding: utf-8 -*-
print('Hello Python')
from Foundation import NSLog
NSLog('Hello Python')
from AppKit import NSAlert
alert = NSAlert.alloc().init()
alert.setMessageText_(u'こんにちは Python')
alert.runModal()
ファインダーからの実行で print
の出力は確認できないが、NSLog
はコンソール
アプリで出力の確認ができる。
*2番目のエラーメッセージは無視して構わない。
Mac アプリビルド後、ターミナルから実行する場合は $ python HelloWorld.py
と実行せずに、
$ ./dist/HelloWorld.app/Contents/MacOS/HelloWorld
と実行する。これは $ python HelloWorld.py
と同義的で、コードに pdb
を仕込んでデバッグも可能。
# -*- coding: utf-8 -*-
print('Hello Python')
from Foundation import NSLog
NSLog('Hello Python')
# pdb.set_trace() で停止する
import pdb
pdb.set_trace()
from AppKit import NSAlert
alert = NSAlert.alloc().init()
alert.setMessageText_(u'こんにちは Python')
alert.runModal()