LoginSignup
4
2

More than 5 years have passed since last update.

PyObjC で HelloWorld

Posted at

始める前に http://qiita.com/tom-u/items/134e2b8d4e11feea8e12 の通りに環境を整える。

ごく普通の Python で HelloWorld はこう書く。

HelloWorld.py
# -*- coding: utf-8 -*-
print('Hello Python')

実行はターミナルからこう。

$ python HelloWorld.py

print.jpg

PyObjC らしい出力は NSLog を使用する。実行方法は同様に。

HelloWorld.py
# -*- coding: utf-8 -*-
print('Hello Python')

from Foundation import NSLog
NSLog('Hello Python')

nslog.jpg

NSLog はタイムスタンプ付きで標準出力する。

さらに PyObjC らしく GUI ダイアログでメッセージ表示。NSAlert を使用する。

HelloWorld.py
# -*- 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()

nsalert.jpg

もっと PyObjC らしくウィンドウで、と行きたくなるが イベント駆動型プログラミング(英: Event-driven programming) を学ぶ事に繋がるので、しばらくはこのまま 手続き型プログラミング(英: Procedural programming) で。

ターミナルからの実行だけでなくファインダーからの実行を可能にする為に py2app で Python コードを Mac アプリ化する。

$ py2applet --make-setup HelloWorld.py && python setup.py py2app --alias

上記を実行すると ./dist/HelloWorld.app が作成されて、通常の Mac アプリ同様にファインダー上から実行が可能になる。

hellopython.jpg

python setup.py py2app --alias--alias は開発向きのオプションで、HelloWorld.py を変更後に再ビルドの必要なくコードが反映される。試しに以下の通りにコードを変更して HelloWorld.app をそのままに実行すると変更が確認できる。

HelloWorld.py
# -*- 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()

konnichiha.jpg

ファインダーからの実行で print の出力は確認できないが、NSLogコンソールアプリで出力の確認ができる。

console.jpg

*2番目のエラーメッセージは無視して構わない。

Mac アプリビルド後、ターミナルから実行する場合は $ python HelloWorld.py と実行せずに、

$ ./dist/HelloWorld.app/Contents/MacOS/HelloWorld

と実行する。これは $ python HelloWorld.py と同義的で、コードに pdb を仕込んでデバッグも可能。

HelloWorld.py
# -*- 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()

debug.jpg

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2