2023年5月8日月曜日

wxPythonでメニューバーやステータスバーを設置する(超入門2)

wxPythonでメニューバーやステータスバーを設置する(超入門2)

概要

前回 wxPython を動かすところまでやってみました
今回は実践としてメニューバーとステータスバーを追加するところまでやってみました

こちらのサンプルコードを使っています

環境

  • macOS 11.7.6
  • Python 3.10.2
  • wxPython 4.2.0

サンプルコード

import wx

class HelloFrame(wx.Frame):
    """フレームを管理するクラス、このクラス配下にパネルやメニューバーを追加します"""

    def __init__(self, *args, **kw):
        super(HelloFrame, self).__init__(*args, **kw)

        # メインパネルの作成
        pnl = wx.Panel(self)

        st = wx.StaticText(pnl, label="Hello World!")
        font = st.GetFont()
        font.PointSize += 10
        font = font.Bold()
        st.SetFont(font)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 25))
        pnl.SetSizer(sizer)

        # メニューバー作成
        self.makeMenuBar()

        # ステータスバー作成
        self.CreateStatusBar()
        self.SetStatusText("Welcome to wxPython!")

    def makeMenuBar(self):
        # メニューの作成
        fileMenu = wx.Menu()
        helpMenu = wx.Menu()
        # メニューバーに表示するアイテムの作成
        helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H", "Help string shown in status bar for this menu item")
        exitItem = fileMenu.Append(wx.ID_EXIT)
        aboutItem = helpMenu.Append(wx.ID_ABOUT)

        # メニューバーの作成、各種アイテムの追加
        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, "&File")
        menuBar.Append(helpMenu, "&Help")
        self.SetMenuBar(menuBar)
        # アイテムが押されたときのイベント処理を定義
        self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
        self.Bind(wx.EVT_MENU, self.OnExit,  exitItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)

    def OnExit(self, event):
        self.Close(True)

    def OnHello(self, event):
        wx.MessageBox("Hello again from wxPython")

    def OnAbout(self, event):
        wx.MessageBox("This is a wxPython Hello World sample", "About Hello World 2", wx.OK|wx.ICON_INFORMATION)


if __name__ == '__main__':
    app = wx.App()
    frm = HelloFrame(None, title='Hello World 2')
    frm.Show()
    app.MainLoop()

ちょっと解説

基本はフレーム上にパネルやメニューを追加していきます
前回の HelloWorld とは違いクラス化していますが実際にアプリケーションを作る場合はこんな感じで各種パーツをクラス化して配置していくほうが開発効率が良いと思います

メニューはメニューバーとアイテムから構成されています
各種アイテムにはイベントを設定することができボタンが押されたときのアクションやホバーしたときのアクションを定義することができます

最後に

次はこのあたりを参考にして必要なパーツの追加やアクションを定義します

0 件のコメント:

コメントを投稿