Pythonスキルの習得

【 Python 】かっこいいGUI wxPythonの使い方入門 その4 – ステータスバー 、メニューバー の紹介 –

【 Python 】かっこいいGUI wxPythonの使い方入門 その4 – ステータスバー 、メニューバー の紹介 –

本記事は、

  • Pythonのスキル、初心者以上の方

を対象にした内容になっております。

本記事は、連載記事となっています。(全7回)

一連の記事を読むことで、

  • かっこよくて
  • おしゃれな

「簡単なGUIアプリ」を作成できるようになります。

例えば、wxPythonで、画像表示アプリを作ってみました。

上記みたいな、見た目(Macの場合)となります。

本記事は、下記の続編となります。

前回までの記事を読んでいなくても、内容が理解できるよう、構成しています。

【 Python 】 かっこいいGUI wxPythonの使い方入門 その1
【 Python 】 かっこいいGUI wxPythonの使い方入門 その1Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。...
【 Python 】 かっこいいGUI wxPythonの使い方入門 その2 - ウィジェットの紹介 -
【 Python 】 かっこいいGUI wxPythonの使い方入門 その2 - ウィジェットの紹介 -Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。ウィジェットの紹介とコードによる配置方法を紹介しました。...
【 Python 】かっこいいGUI wxPythonの使い方入門 その3 - レイアウト( Panel , Sizer )の紹介 -
【 Python 】かっこいいGUI wxPythonの使い方入門 その3 - レイアウト( Panel , Sizer )の紹介 -Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。wxPythonにおいて、レイアウト設計の考え方と設置方法をご紹介しました。パネルと、サイザー(wrapsizer、staticboxsizer、flexgridsizer、gridsizer、boxsizer)の概要説明と、Pythonによるコード紹介をした記事です。...

本記事のゴール設定

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回(本記事)で、「画面の見た目」を、ご紹介しました。

次回は、ボタン押下時や、メニュー選択時に発生する「イベント」処理をご紹介しています。

【 Python 】かっこいいGUI wxPythonの使い方入門 その5 – ボタン、メニュー選択等で発生する、イベントの処理方法 を紹介 –
【 Python 】かっこいいGUI wxPythonの使い方入門 その5 – ボタン、メニュー選択等で発生する、イベントの処理方法 を紹介 –Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。wxPythonにおいて、メニューを選択したり、ボタン押下時等に発生する、イベントの処理方法を紹介した記事です。...

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

また、お会いしましょう。