本記事は、
- Pythonのスキル、初心者以上の方
を対象にした内容になっております。
本記事は、連載記事となっています。(全7回)
一連の記事を読むことで、
- かっこよくて
- おしゃれな
「簡単なGUIアプリ」を作成できるようになります。

例えば、wxPythonで、画像表示アプリを作ってみました。
上記みたいな、見た目(Macの場合)となります。
本記事は、下記の続編となります。
前回までの記事を読んでいなくても、内容が理解できるよう、構成しています。



本記事のゴール設定
wxPythonの
- ステータスバーの設置方法、
- メニューバーの設置方法
を理解する事になっています。
前回までに、雛形コードとして、下記をご紹介しました。
本記事のコードは、下記コード中の22〜25行目に該当する部分の、ご紹介となります。
import wx
class MyPanel(wx.Panel):
def __init__(self, parent):
super().__init__(self, parent)
######################################
# ここにSizer, ボタン等のウィジェットを記載
# (本記事にて、解説)
######################################
######################################################
# ここにボタンを押下等のイベント処理を、メソッドで記載することが多い
# (別途、解説します)
######################################################
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, id=-1, title='wxPython')
panel = MyPanel(self)
########################################################
# 必要ならば、メニューバー、ステータスバー、ツールバーを作成する
# (別途、解説します)
########################################################
self.Show()
if __name__ == '__main__':
app = wx.App()
frame = MyFrame()
app.MainLoop()
ステータスバーの設置とコード紹介
ステータスバーとは

上図の通り、ウインドウの下側に、表示される部分です。
補足情報を表示させたりします。
Pythonによるコード紹介
ステータスバーの設置
設置するのに必要なコードは、下記1行のみです。
sb = self.CreateStatusBar()
ウインドウ全体を管理している、Frameオブジェクト内で、呼び出します。
ステータスバーに、文字を出力させるコード
上記コードの、変数「sb」は、self.CreateStatusBar( )で作られたオブジェクトを、格納しています。
その変数「sb」に、下記メソッドにて、表示したい文字列を設定します。
sb.SetStatusText('表示したい文字列')
<実行結果>

ステータスバーの複数エリアに、文字列を表示させる方法
ステータスバーを、複数のエリアに区切って、文字列を表示させる事が可能です。
言葉ではよく分からないと思うので、下絵をご覧ください。

<Pythonのコード>
# 引数numberに、区切りたいエリア数を設定
sb = self.CreateStatusBar(number=3)
# 各エリアの広さを、比で設定 (1: 2: 1 の割合)
sb.SetStatusWidths([-1, -2, -1])
# 表示したい文字と、表示したいエリア番号を指定(0より開始)
sb.SetStatusText('aaaa', 0)
sb.SetStatusText('bbbb', 1)
sb.SetStatusText('cccc', 2)
メニューバーの設置とコード紹介
メニューバーとは
画面上部に表示されるものです。(下記は、Macの事例です。)

Windowsの場合は、ウインドウの上部に、メニューが表示されます。

少し厳密な定義
下記のように、「メニューバー」と「メニュー」は、区別されています。

- メニューバー: 横一列に並んでいる、項目一覧
- メニュー:メニューバーの各項目、それぞれの中身 一覧
Pythonによるコード紹介
wxPythonでは、下記イメージで、コードを記載します。

下記メニュー構成を例題とした、Pythonコードをご紹介します。
メニューバーに
- ファイル
- 編集
を設定する。
メニューバーで設定した「ファイル」の、メニューとして
- 新規作成
- 保存
- 終了
を設定。
また、設定した「編集」の、メニューとして
- 画像サイズ変更
- グレーイメージ化
を設定する。
# 「ファイル」のメニューを作成
f_menu = wx.Menu()
# 下記の第一引数は「メニューコマンド ID」
# なんでもOKの場合、-1
f_menu.Append(-1, '新規作成')
f_menu.Append(-1, '保存')
f_menu.Append(-1, '終了')
# 「編集」のメニューを作成
s_menu = wx.Menu()
s_menu.Append(-1, '画像サイズ変更')
s_menu.Append(-1, 'グレーイメージ化')
# メニューバーを作成
m_bar = wx.MenuBar()
m_bar.Append(f_menu, 'ファイル')
m_bar.Append(s_menu, '編集')
# メニューバーをFrameに設定
self.SetMenuBar(m_bar)
<実行結果>
以下の見た目になります。(Macの場合)

Macの場合、標準で表示される、メニューがあります。
- 「リンゴマーク」や「Window」など
ステータスバーへの表示
マウスがメニューの上にある時に(クリックはしていない時)、ステータスバーに、文字を表示したい時に使います。
<イメージ絵>

Pythonコード
上記の場合、先ほど紹介したコードの、5行目部分を
f_menu.Append(-1, '新規作成', '新規作成をします。')
とします。
- 第3引数に設定した文字列が、
マウスオーバー時に、ステータスバーに表示される文字列となります。
メニューに、ショートカットキーを設定したい場合
下記のような、事例です。

Pythonコード
先ほど紹介したコードの、5行目部分を例にした場合
f_menu.Append(-1, '新規作成\tCtrl-N')
となります。
第2引数の、文字列につなげて、
- \(バックスラッシュ)tCtrl-<割当てる文字>
を入れます。
(\t は、タブを意味します。)
上記のように設定しても、OSにより挙動が異なります。
- Windowsの場合: Ctrl + <割当てる文字>
- Macの場合: Command + <割当てる文字>
がショートカットキーになります。
F1等のファンクションキーを、割り当てたい場合、
f_menu.Append(-1, '終了\tF1')
と設定します。
メニューバーに、ショートカットキーを設定したい場合
下記のような事例です。

この機能は、Windowsのみ、有効です。
(Macでは、設定しても、無効になります。)
Pythonコード
m_bar.Append(f_menu, 'ファイル(&F)')
メニューバーに、Append( )する時に
- 第2引数の文字列の最後に、(&<割当てる文字>)
と設定します。
これで、Alt + <割当てた文字>にて、メニューが開くようになります。
本記事のコードをまとめる
本記事で紹介した
- ステータスバー
- メニューバー
の作成部分のコードは、メソッドとしてまとめた方が、見やすくなるかと思います。
例えば、下記コードのような形です。(臨機応変に、対応して頂ければと思います。)
import wx
class MyPanel(wx.Panel):
def __init__(self, parent):
super().__init__(self, parent)
######################################
# ここにSizer, ボタン等のウィジェットを記載
# (本記事にて、解説)
######################################
######################################################
# ここにボタンを押下等のイベント処理を、メソッドで記載することが多い
# (別途、解説します)
######################################################
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, id=-1, title='wxPython')
panel = MyPanel(self)
self.create_status_bar()
self.create_menu_bar()
self.Show()
def create_status_bar(self):
######################################
# ここにステータスバーを作るためのコードを記載
######################################
def create_menu_bar(self):
######################################
# ここにメニューを作るためのコードを記載
######################################
if __name__ == '__main__':
app = wx.App()
frame = MyFrame()
app.MainLoop()
次回予告
今回、「イベント処理」の記事を予定していました。
しかし、GUIに関わる記事をまとめようと思い、第2回、3回、4回(本記事)で、「画面の見た目」を、ご紹介しました。
次回は、ボタン押下時や、メニュー選択時に発生する「イベント」処理をご紹介しています。

最後まで読んで頂き、ありがとうございました。
また、お会いしましょう。