4. メニューバーをつける
作成しているアプリケーションに追加する次のコンポーネントは、メニューバーです。メニュバーはwindowsプログラムのコモンコンポーネントです。作成したメニューバーは2つのメニュー、FileメニューとHelpメニューを含むことにします。2つのいずれかを選択するとドロップダウンメニューが表示されるようにします。ユーザーはこのドロップダウンメニューからメニューアイテムを選択するわけです。
- エディタ内のwxFrame1タブを選択し、現在フレームを編集していることを確かめます。
- エディタツールバーからデザイナボタンを押してデザイナを立ち上げます。
- デザイナオプションは2つのウィンドウを表示します。すなわち、レイアウトのために使われるデザイナウィンドウ、もう一つはインスペクタウィンドウ内のDataタブ内のデータビュー(Data View)です。
- パレット上で「ユーティリティ(Utilities)」と呼ばれるタブを選択してください。このタブは不可視なコンポーネントのエントリが含まれています。ドロップダウンメニュー(wxMenu)はこのコンポーネントの一つとしてリストアップされています。
- マウスをこれらのボタンの一つの上にもっていくと、ポップアップヘルプがでて、コンポーネントの名前を教えてくれます。
- コンポーネントwxMenuBarボタンを押します。ボタンがへこんでシェーディングが変化します。そしてパレットは現在選択しているコンポーネントのタイプがチェックボックス付きで表示されます。これがたぶんwxMenuBarとなっていると思います。
- そのままデザイナのフォームではなくデータタブのデータビューにマウスカーソルを持っていって左クリックしてください。データビューにMenuBar1が追加されます。
- このMenuBar1を選択し、インスペクタ上のプロパティタブをクリックします。プロパティタブの「Menus」フィールドにメニュー「File」「Help」を追加するためです。
- プロパティタブで「Menus」フィールドをクリック、「...」ボタンを押します。コレクションエディタが開きます。ステータスバーで行ったことと同じように、「New」ボタンを押してMenus0が新規作成されるのでこれを選択してプロパティタブの「Title」をクリック、「Menus0」を「File」に変えます。コレクションエディタ上のリフレッシュボタンを押して反映させます。同じことを繰り返し「Help」を作成してください。リフレッシュボタンを忘れずに。コレクションエディタを閉じます。
- メニューバーをフレームと結び付けます。デザイナウィンドウに戻ってフレームをクリックします。インスペクタのプロパティタブを選択し、MenuBarフィールドをクリックします。リストに今作成したself.statusBar1がありますので選択します。
- インスペクタウィンドウのPostボタンを押して今までの変更をソースコードに反映させます。ソースコードもSaveしてアプリケーションを実行してみてください。以下のようになっていると思います。これでメニューバーを作成したわけです。
- 次にメニューアイテムの作成に移ります。メニュバーの「File」に「Open」「Save」「Save As」「Close」「Exit」の4つのメニューアイテムを、「Help」にメニューアイテム「About」を追加することにします。
- デザイナボタンを押しデザイナウィンドウとデータビューを表示させます。パレットからwxMenuボタンを押し、データビューをクリックしてwxMenuコンポーネントを2つ追加します。
- これでデータビュー上にmenu1とmenu2と呼ばれる2つのwxMenuができたと思います。menu1をマウスを使って選択してください。そうするとインスペクタがmenu1の名前(Name)とタイトル(Title)を表示すると思います。
- 最初のwxMenu(menu1)には「mnuFile」という名前に変えることにします。Nameをクリックして「menu1」から「mnuFile」にします。2つ目のwxMenu(menu2)も同じようにして、今度は「mnuHelp」という名前をつけます。
- まず、メニューアイテムが「About」しかないmnuHelpから手をつけましょう。メニューmnuHelpを選択し、インスペクタ上のプロパティタブをクリックしてください。「Items」の値を編集するためクリックします。フィールドに小さなボタン(...)が出てくるのでクリックします。これで「コレクションエディタ(Collection Editor)」がでてきます。このコレクションエディタは作成したメニューにメニューアイテムを追加するために使います。
- コレクションエディタ上で「New」ボタンを押しアイテムを新規作成します。
- そのアイテムを選択し、インスペクタ上の「Label」フィールドを編集します。「item0」を「About」に値を設定します。
- 「Help String」フィールドを編集します。これは実行時にメニューを選択すると、ステータスバーに表示させる文字列です。「item0」を「Display general infomation about Notebook」にします。
- コレクションエディタのツールバーに「リフレッシュ(Refresh)」ボタンが含まれています。このボタンをおして、コレクションエディタウィンドウ上の変更がインスペクタに反映させます
- 「About」メニューアイテムをアクティブにしたままインスペクタ内でイベント(Event)タブを選択してください。これはイベントを設定するために使うタブです。「About」メニューアイテムが選択された時に起きるアクションを設定する必要があります。要するに、「About」メニューアイテムが選択されたとき、EVT_MENUと呼ばれるイベントが生成され、作成したプログラムに送られます。このイベントを取り扱うため、作成中のクラスにメソッドを一つ追加する必要があるわけです。
- イベントタブの左側は使うことができるイベントのグループが表示されます。メニューアイテムに対しては、「MenuEvent」グループのみです。このグループをマウスで選択してください。
- イベントタブの右側には、選択されたグループ内のイベントが表示されます。メニューアイテムでは、「MenuEvent」グループ内ではEVT_MENUイベントのみです。マウスでそのイベントEVT_MENUをダブルクリックします。
- イベントタブの下側は現在のコンポーネント(「About」アイテム)に対する、作成中のアプリケーションのイベントハンドラを表示します。ここではOnMnuhelpitems0Menuとなります。これはHelpメニューからAboutオプションが選択された時に呼び出されるメソッドの名前です。
- イベントハンドラの名前付けに気をつけてください。Boa Constructorは以下のやり方で名前を作成します。名前の頭に来るのがイベント名、次に来るのがコンポーネント名です。ここでは、mnuHelpコンポーネントのサブコンポーネントitems0です。最後に、Boa Constructorはすべてのハンドラの頭に「On」という単語をつける慣例にならいます。つまり、ここでのイベントハンドラの名前は「OnMnuhelpitems0Menu」となります。
- refreshボタンで更新した後、コレクションエディタを閉じてください。

「File」メニューに追加するオプションも同じようにします。
- エディタ内でデータビューからmnuFileを選択してください。
- インスペクタからプロパティタブを選択します。メニューアイテムをクリックして編集します。「...」ボタンをクリックし、menuitemsのコレクションエディタを立ち上げます。
- コレクションエディタを使い、5つのメニューアイテムを作成するためのNewボタンを押します。
- それぞれのメニューアイテムを選択し、「Open」、「Save」、「Save As」、「Close」、「Exit」とつけます。各メニューアイテムのヘルプテキストを入力します。新しいラベルを表示するため、コレクションエディタのRefreshボタンを押します。
- 順番に各メニューアイテムを選択してください。各アイテムに対し、インスペクタ上でイベントタブを選択して「MenuEvent」を選択、EVT_MENUをダブルクリック・・・これを5つのメニューアイテムに順番にやっていくわけです。これで、各アイテムへのEVT_MENUに対するイベントハンドラを追加しました。
- コレクションエディタを閉じます
- 最後にメニュバーと各メニューとを結び付けます。デザイナボタンを押してデータビューのmenuBar1を選択し、インスペクタウィンドウのプロパティタブを選択します。「Menus」フィールドをクリックし、「...」ボタンを押してコレクションエディタを出します。
- コレクションエディタに「File」「Help」の2つのフィールドがありますのでまず「File」を選択し、インスペクタウィンドウのコンストラクタタブを選択します。「Menu」フィールドをクリックすると、「File」メニューと結び付けたいメニューアイテムがリストアップされています。「self.mnuFile」を選んでください。コレクションウィンドウに戻ってリフレッシュボタンを押します。
- 同じようにして「Help」メニューを「self.mnuHelp」メニューアイテムに結び付けてください。リフレッシュボタンを押すのを忘れずに。
- 変更をソースコードに反映させましょう。デザイナ上に戻ってフレームを選択します。
- インスペクタ上でPostボタンを押して変更を保存します。デザイナが閉じます。
- 生成されたソースファイルwxFrame1.pyを保存します。
- プログラムを実行します。メニューバーとステータスバーが表示されていると思います。マウスをメニューオプションでクリックすると、ステータスバーにヘルプテキストが表示されるはずです(ここではAboutメニューアイテムにしか実装してませんけどね)。