MacPythonについてのページ(よ)>
Python(MyApp) で Mac アプリケーションを作る|目次

第10回 アバウトボックスをリソースで作る


このページの目次

アバウトボックスをリソースで作る
    アバウトボックスのために MyApp.py を訂正
    DLOG リソースを作る
    DITL を作る
    aboutnew.py ファイルを作る
アバウトボックスを表示してみましょう
ここまでのまとめ


アバウトボックスをリソースで作る

前回は Wウィジェットでダイアログボックスを作りました。でも、背景の色が少し面倒でした。絵を付けましたが、リソースファイルの PICT リソースの画像を使ったのなら、初めからリソースでアバウトボックスを使った方が楽かもしれません。

それに、普通のアプリケーションもリソースにアバウトボックスがあるものが多いようです。それで、リソースで作ってみます。基本的には Python:Mac:Demo:example1:dnslookup-1.py と同じ方法です。

アバウトボックスのために MyApp.py を訂正

前回までの speak6.sit.bin に手を入れながら作ります。まず、新しいアバウトボックスを表示するために aboutnew.py を作ることにします。そのために、MyApp.py の do_about メソッドを書き直します。

MyApp.py
変更前:177-181
----------------------------------------------
 def do_about(self, id, item, window, event):
  # This shows your application's about box.
  #   Replace it
  import about
  about = about.AboutBox()
----------------------------------------------
変更後:177-181
----------------------------------------------
 def do_about(self, id, item, window, event):
  # This shows your application's about box.
  #   Replace it
  import aboutnew
  about = aboutnew.AboutBox()
----------------------------------------------

DLOG リソースを作る

次に aboutnew.py を作っていきたいところですが、その前にわかり易いように、リソースを先に作っていきます。

MyApp.rsrc を ResEdit で開きます。

MyApp.rsrc を開いたところ

『Resurce』メニューから『Create New Resurce』を選びます。リソースを選ぶリストが出るので、『DLOG』を選びます。すると、ウィンドウが開きます。

ウィンドウが開く

ID が自動的に 128 になっているので、 Python:Mac:Demo:example1.html にしたがって、512 にします。それには『Resurce』メニューから『Get Resurce Info』を選びます。

Resurce Info

この 128 を 512 に変更します。ついでにその下の欄に“About”とでも入れておきます。

Resurce Info 書き換えた後

書き換えたら、クローズボックスをクリックして Resurce Info ウィンドウを閉じます。

すると、ウィンドウのタイトルが『DLOG "About" ID = 512』なります。このウィンドウの右側にある『DITL ID:』も 512 にしておきます。

このウィンドウの上にウィンドウの絵が 11 個並んでいます。この中からアバウトボックスとして表示するウィンドウの種類を選べます。今はアバウトボックスを作っているので、左から9番目、真ん中に「5」と描かれているウィンドウをクリックして選択します。

ウィンドウのタイトルを設定します。『DLOG』メニューから『Set 'DLOG' Characteristics...』を選びます。ダイアログがでますので、『Window title:』に『Speak App』と打ち込んで、OK ボタンを押します。

ウィンドウタイトルの設定

次に、ウィンドウがディスプレイの中央に表示されるようにします。『DLOG』メニューから『Auto Position...』を選びます。左のポップアップメニューから『Ceneter』、右から『Main Screen』を選びます。

Auto Position...のウィンドウ

設定したら、OK ボタンを押すと閉じます。

ウィンドウの大きさを変えるには、画面の中のウィンドウ右下の黒い四角をドラッグすれば大きさを変更できます。また、『DLOG』メニューの『Preview at Full Size』でだいたいの様子を確認することができます。

前回の Wウィジェットで作ったアバウトボックスはカラーにしたので、こちらも同じようにカラーにしましょう。『DLOG "About" ID = 512』のウィンドウの右側にある『Color:』の『Custom』ラジオボタンを選びます。すると、『dctb』リソースを作ってよいか、というようなダイアログが出るので、OK ボタンを押します。

dctb のダイアログ

すると、『Custom』の下にいくつかカラー選択の項目ができるので、『Content:』の右の四角をクリックします。カラーパレットが出るので、前回のものにあわせて紫を選びました。

DOLG で紫を選んだ

DITL を作る

次に DITL リソースを作ります。『DLOG "About" ID = 512』のウィンドウの中の画面に表示されているウィンドウをダブルクリックします。すると、『DITL ID =512 From MyApp.rsrc』ウィンドウが開きます。

DITL のウィンドウ

右のパレットから、『Button』をドラッグして、ウィンドウ内の左下に置きます。これをクリックするとウィンドウが開くので『Text:』を OK にします。クローズボックスをクリックして閉じます。

ボタンの設定

次に、パレットから『Static Text』をドラッグして、ウィンドウの上部に置きます。この右下の黒い四角をドラッグして少し広げて下さい。これもダブルクリックしてウィンドウを開き、『Text:』を削除しておきます。クローズボックスをクリックして閉じます。

Static Text の設定

次に、パレットから『Picture』をドラッグして、ウィンドウの右下に置きます。この右下の黒い四角をドラッグして少し広げて下さい。これもダブルクリックしてウィンドウを開き、『Resurce ID:』を『128』にします。クローズボックスをクリックして閉じます。

Picture の設定

Picture で選んだ ID 128 は前回作ったのがありますので、大きさを調整してみて下さい。ここまでは、以下のようになります。

DITL の画像

それぞれのアイテムの右肩にアイテムナンバーがついています。上の画像にようになっていることを確認して下さい。違っている場合は変更したいアイテムを選択して、『DITL』メニューの『Set Item Number...』で変更して下さい。よければ、『DITL ID =512 From MyApp.rsrc』ウィンドウのクローズボックスをクリックして閉じます。『File』メニューから『Save』を選んで保存してください。ResEdit を終了して下さい。

これで、MyApp.rsrc の変更は終了です。

aboutnew.py ファイルを作る

今度は aboutnew.py ファイルを作ります。

aboutnew.py
----------------------------------------------
import MyApp
import Dlg

ID_ABOUT = 512
ITEM_BUTTON = 1
ITEM_TEXT = 2
ABOUT_TEXT = MyApp.__appname__ + '  ' + MyApp.__version__ + '\r    by ' + 
        MyApp.__author__ + '\r    ' + MyApp.__date__

def AboutBox():
 f = Dlg.GetNewDialog(ID_ABOUT, -1)
 f.SetDialogDefaultItem(ITEM_BUTTON)
 tp,h,rect = f.GetDialogItem(ITEM_TEXT)
 Dlg.SetDialogItemText(h, ABOUT_TEXT)
 while 1:
  n = Dlg.ModalDialog(None)
  if n == ITEM_BUTTON:
   return
----------------------------------------------

簡単に説明します。基本的なことは Python:Mac:Demo:example1:sxample1.py と同じような感じです。だから私の説明をあんまり信用しないように。

import MyApp

前回の about.py と同じように、__appname__ などの文字列の情報を得るためにインポートします。

import Dlg

Python:Mac:Demo:example1:example1.html と同じように Dlg が必要です。

ID_ABOUT = 512
ITEM_BUTTON = 1
ITEM_TEXT = 2

アバウトボックスとして表示するリソースの ID と、Button と Static Text のアイテムナンバーを代入しています。『マジックナンバーには名前をつけよう』(『プログラミング作法』Braian W. Kernighan, Rob Pike, 福崎 敏博 訳, 株式会社アスキー)ということで名前を付けました。

ABOUT_TEXT = MyApp.__appname__ + ' ' + MyApp.__version__ + '\r by ' + MyApp.__author__ + '\r ' + MyApp.__date__

前回と同じく(結局使いませんでしたが)アバウトボックスに表示する文字列を定義しています。

def AboutBox():

メソッドだから小文字で始めた方がよかったかも...

f = Dlg.GetNewDialog(ID_ABOUT, -1)

DLOG リソースの番号 ID_ABOUT を最前面(-1)で開き、f に代入します。

f.SetDialogDefaultItem(ITEM_BUTTON)

開いたダイアログ(f)の中の ITEM_BUTTON(1)をデフォルトにします。この場合ボタンなので、縁取りされ、return、enter ボタンで反応します。この SetDialogDefaultItem メソッドは pydoc や、Dlg.__dict__.keys() で調べても出てきません。C 言語のソースを見て、存在を知りました。

tp,h,rect = f.GetDialogItem(ITEM_TEXT)

ITEM_TEXT のアイテム情報を取り出します。そのうちの h しか使いませんが。

Dlg.SetDialogItemText(h, ABOUT_TEXT)

上で得た h に ABOUT_TEXT を入れます。これで文字列が Static Text に表示されます。

while 1:
  n = Dlg.ModalDialog(None)
  if n == ITEM_BUTTON:
    return

ここは Python:Mac:Demo:example1:sxample1.py と同じです。ITEM_BUTTON が押されるまでループして待ちます。

アバウトボックスを表示してみましょう

aboutnew.py ができたら、保存します。それでは MyApp.py を実行して、Apple メニューから『SpeakApp について...』を実行してみましょう。

リソースから作ったアバウトボックス

どうでしょう、このようになったでしょうか?背景の色がパレットから選べるし、縁まできれいに表示されます。Wウィジェットで作るより Python のソースが短いし、ResEdit の操作になれると簡単なので、私はアバウトボックスは リソースで作るのが楽かなと思います。

ここまでのまとめ

今回は ResEdit での操作がいろいろあったので、詳しく書いたつもりです。わかりにくいところがあったら、BBSにでも書き込んで下さい。

ここまでの MyApp.py と speakwin.py、aboutnew.py、前回の about.py、そして 私の作った画像も含んだ MyApp.rsrc を一つのフォルダに入れた speak7.sit.bin(約 30k)を作りました。


<▲このページのTOPへ>
戻る   次へ
Python(MyApp) で Mac アプリケーションを作る|目次
MacPythonのページ(よ)トップへ

by ©Hioryuki Yoshimura, 2002-2003.
Last modified at 2003/1/22