この文書はDr. Corran WebsterさんによるW Widgetsを真似て、W Widgetsに説明されたMyApp.pyを使ってMacアプリを作る方法をわたし吉村が説明したものです。
誤っているところや、おかしいところがあるかもしれません。お気づきの点がございましたら、わたしまでお知らせいただければ幸いです。
このセクションでは、Dr. Corran WebsterさんによるW Widgetsに説明されているテンプレートアプリケーション(MyApp.py)を使って、簡単なアプリケーションを作ってみます。
話を簡単にするために、Python1.5.2のPythonIDEのScriptsメニューにある"Search Python Dcumentation..."をスタンドアローンのアプリケーションにしてみます。テンプレートアプリケーション(以下、MyApp.pyと略します)はアプレットあるいはアプリケーション形式へビルドしないと動作しませんが、MyApp.pyを少し書き加えて、ダブルクリックで動作可能なWウィジェットスクリプトを作る方法についても説明します。
Python1.5.2のPythonIDE上でSpriptメニューにある"Search Python Documentation..."を動作させることができますが、『Python 1.5.2c1:Mac:IDE scripts』フォルダの"Search Python Documentation..."のファイルをダブルクリック、あるいはPythonInterpreterにドロップするとエラーが出てしまいます。
なぜなら、Wウィジェットが必要とするリソースがないからです。Wウィジェットを使ったスクリプトはPythonIDE上でしか動作しないのです。これを解決するシンプルな方法は、Wウィジェットに必要なリソースMyApp.rsrcを加えてMyApp.pyを使ってアプレットまたはアプリケーションにすることです。
方法は以下の通りです。
# Process some events!<変更後>
self.mainloop()
# Process some events!へ変更します。忘れずに保存してください。
import PyDocSearch
# set the creator of the browser. 'MSIE' = Exploser, 'MOSS' = Netscape
PyDocSearch.SIGNATURE = 'MOSS'
pds = PyDocSearch.PyDocSearch()
self.mainloop()
MyApp.pyはファイル名を変更してもいいですが、そのときにはMyApp.rsrcも変更してください。XXXX.pyならリソースファイルもXXXX.rsrcにしてください。そうしないと、ビルドのときに取り込んでくれません。
こうしてできたアプレットあるいはアプリケーションはダブルクリックで起動可能で、Wウィジェットもちゃんと機能します。
このようにして、Wウィジェットを使ったスクリプトをself.mainloopの前でインポートしたりすることによってアプリケーションを作ることができます。
これはこれでいいのですが、スクリプトをいちいちビルドするのは面倒です。それに作成の途中で動作を確認したいこともあるでしょうし、アプレット形式ではなく、スクリプトファイルの形でいつでも編集できるようにしておきたいでしょう。そこで、スクリプトファイルの状態でPythonInterpreterで実行可能なようにMyApp.pyを書き替えましょう。
そうするには、スクリプト実行時にリソースを読み込むように、MyApp.pyに書き加えればいいんです。Python:Mac:Demo:Example2の"dnslookup-2.py"の方法を使います。
MyApp.pyの最初に以下の行を加えます。
# macfreeze: exclude Wthreading # macfreeze: exclude continuation ### Python2.2では以下の5行も必要です。 # macfreeze: exclude readline # macfreeze: exclude SOCKS # macfreeze: exclude msvcrt # macfreeze: exclude rourl2path # macfreeze: exclude termios import EasyDialogs import Res import sys if sys.argv[0][-3:] == '.py': RSRC_NAME= sys.argv[0][:-3] + '.rsrc' else: RSRC_NAME= sys.argv[0] + '.rsrc' try: dummy = Res.GetResource('cicn', 468) except Res.Error: try: Res.FSpOpenResFile(RSRC_NAME, 1) except Res.Error: EasyDialogs.Message("Cannot open "+RSRC_NAME) sys.exit(1)
先頭の7行
# macfreeze: exclude Wthreading # macfreeze: exclude continuation # macfreeze: exclude readline # macfreeze: exclude SOCKS # macfreeze: exclude msvcrt # macfreeze: exclude rourl2path # macfreeze: exclude termios
は、わたしの環境でBuildApplicationの実行時に検索しようとしてエラーが出るので加えました。
これでMyApp.pyのダブルクリックあるいはPythonInterpreterへのドロップにより、起動します。
ここで作成した"Search Python Document"スクリプトをmiのPythonモードに添付しています。
このMyApp.pyとMyApp.rsrc(約10k)をひな形として、アプリケーション作成にお役立てください。
誤記、補足など追記。
(2002/07/09)
MacPython2.1.1,2.2.1,2.0,1.5.2c1に対応するようMyApp.pyを書き換えました。
(2002/06/02)
MyApp.pyのテキストファイルに不要な行
from MyDocument import MyDocumentClass
がありましたので、削除しました。(2002/01/27)