Pythonスキルの習得

【 Python 】かっこいいGUI wxPythonの使い方入門 その7 – ウインドウサイズ、スタイル、アイコンの設定と、実行ファイルへのビルド方法 –

【 Python 】かっこいいGUI wxPythonの使い方入門 その7 – ウインドウサイズ、スタイル、アイコンの設定と、実行ファイルへのビルド方法 –

本記事は、

  • Pythonのスキル、初心者以上の方
  • wxPython、入門レベル以上の方

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

本記事は、連載記事となっています。(全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によるコード紹介をした記事です。...
【 Python 】かっこいいGUI wxPythonの使い方入門 その4 – ステータスバー 、メニューバー の紹介 –
【 Python 】かっこいいGUI wxPythonの使い方入門 その4 – ステータスバー 、メニューバー の紹介 –Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。wxPythonにおいて、ステータスバー、メニューバーの設置方法を、Pythonによるコードにて紹介した記事です。...
【 Python 】かっこいいGUI wxPythonの使い方入門 その5 – ボタン、メニュー選択等で発生する、イベントの処理方法 を紹介 –
【 Python 】かっこいいGUI wxPythonの使い方入門 その5 – ボタン、メニュー選択等で発生する、イベントの処理方法 を紹介 –Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。wxPythonにおいて、メニューを選択したり、ボタン押下時等に発生する、イベントの処理方法を紹介した記事です。...
【 Python 】かっこいいGUI wxPythonの使い方入門 その6 – ファイルダイアログの作り方 紹介 –
【 Python 】かっこいいGUI wxPythonの使い方入門 その6 – ファイルダイアログの作り方 紹介 –Pythonの、かっこいいGUIである、wxPythonの使い方を紹介した記事です。wxPythonにおいて、ファイルダイアログ ボックスの作り方を紹介した記事です。...

本記事のゴール

  • ビルド前の設定項目
    • ウインドウサイズの設定
    • ウインドウスタイルの設定
    • アイコンの設定
  • 実行ファイルへの、ビルド方法

を習得する事にしています。

ビルド前の設定項目

この章では、

  • ウインドウサイズの設定
  • ウインドウスタイルの設定
  • アイコンの設定方法、

をご紹介します。

本章にて追加する、コード

下記をwxPythonの雛形コードとして、使用します。

この雛形コードに、追記する形で、解説していきます。

追記する部分は、以下の通りです。

  • ウインドウサイズとアイコンの設定 → 17行目部分に追記
  • ウインドウスタイルの設定 → 14行目を変更
  • アイコンの設定(Windowsのみ) → 18行目部分に追記
import wx

class MyPanel(wx.Panel):
    def __init__(self, parent):
        super().__init__(self, parent)

        ######################################
        #  省略(前回までの記事をご参照ください。)
        ######################################


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()

ウインドウサイズとスタイルの設定

ウインドウサイズの設定

冒頭で紹介した「雛形コード」の、17行目に追加するコードになります。

        self.SetSize(500, 500)

コードの解説

  • 第1引数:横幅をピクセルで指定
  • 第2引数:縦幅をピクセルで指定

ウインドウの最大サイズ、最小サイズを制限したい場合

最大サイズの制限 → self.SetMaxSize((横幅, 縦幅))

最小サイズの制限 → self.SetMinSize((横幅, 縦幅))

ウインドウサイズを固定する事もできます。

次章で、ご紹介しています。

ウインドウスタイルの設定方法

変更箇所は、基底クラスのコンストラクタを呼び出している箇所(雛形コード 14行目)です。

sytle引数に、設定を記載します。

  • super().init(None, id=-1, title=’wxPython’, style=[ここに設定を記載] )

デフォルトでは、wx.DEFAULT_FRAME_STYLE というものが設定されています。

これには、以下のスタイルが含まれています。

  • wx.MINIMIZE_BOX:最小化ボタンを表示
  • wx.MAXIMIZE_BOX:最大化ボタンを表示
  • wx.RESIZE_BORDER:リサイズボーダーの表示
  • wx.SYSTEM_MENU:システムのメニュー表示するか
  • wx.CAPTION:Captionの表示をするか
  • wx.CLOSE_BOX:消去ボタンを表示
  • wx.CLIP_CHILDREN.:分かりません・・(ドキュメントにも書かれてません・・)
設定方法のご紹介

例えば

  • 「最大化」ボタンの非表示と
  • 「ウインドウサイズ」を不変にしたい場合、

下記コードのように、デフォルト値から、設定したくない項目を、差し引く形で表現するのが、オススメです。

◆ MyFrameクラスの、コンストラクタ 冒頭部分のみを抜粋

class MyFrame(wx.Frame):
    def __init__(self):
        style = wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)
        super().__init__(None, id=-1, title='wxPython', style=style)

<実行結果>

wx.Captionに関しては、単独で設定できません。

詳細は、公式ドキュメントを、ご確認ください。

ウインドウ左上の、アイコン画像の設定(Windowsのみ)

冒頭で紹介した「雛形コード」の、18行目に追加するコードになります。

ウインドウ左上の、アイコンを設定する方法です。

Macは、元々表示されないため、本設定の効果はありません。

この章で紹介する、アイコンの表示場所

ICOファイルを使用する場合

        icon = wx.Icon('ファイルへのパス', wx.BITMAP_TYPE_ICO)
        self.SetIcon(icon)

wx.Icon( ) コードの解説

  • 第1引数:*.ico ファイルへのファイルパス
  • 第2引数:ファイル種を指定 (wx.BITMAP_TYPE_ICO は アイコンファイルを指定)

PNG、JPG等の画像ファイルを使用する場合

wx.Icon( ) メソッドの第2引数を変更します。

JPGファイルの場合
        icon = wx.Icon('ファイルへのパス', wx.BITMAP_TYPE_JPEG)
        self.SetIcon(icon)
PNGファイルの場合
        icon = wx.Icon('ファイルへのパス', wx.BITMAP_TYPE_PNG)
        self.SetIcon(icon)
GIFファイルの場合
        icon = wx.Icon('ファイルへのパス', wx.BITMAP_TYPE_GIF)
        self.SetIcon(icon)

その他のファイル形式の場合は、wxPythonの公式ドキュメントをご覧ください。

Python 公式ドキュメントへのリンク(ファイル形式を紹介しているページ)

実行ファイルへの、ビルド方法

  • ビルドに必要な、パッケージの紹介
  • Mac版(appファイルへのビルド)
  • Windows版(exeファイルへのビルド)

の順番で、ご説明します。

  • Windows用のアプリは、Windowsから
  • Mac用のアプリは、Macから

ビルドする必要があります。

Windowsアプリを、Macからビルドはできません。

ビルドに必要なパッケージ

PyInstallerを使用するのが、簡単です

pipを使用するのが、簡単です。

pip install pyinstaller

pipに関して、詳細を知りたい方は、下記記事が参考になります。

【Python】pipの使い型入門 - コマンドライン、Anaconda、PyCharmからの操作方法を解説 -
【Python】pipの使い方入門 - コマンドライン、Anaconda、PyCharmからの操作方法を解説 -Python入門者を対象に、pipの使い型を解説した記事です。 コマンドライン、Anaconda、PyCharmからの操作方法を、わかりやすく解説しました。 ...

Mac版(appファイルへのビルド)

ターミナルより、下記コマンドを入力します。

pyinstaller [pyファイルへのパス] --onefile -w --icon=[アイコンファイルへのパス]
# 例
# pyinstaller file_dialog.py --onefile -w --icon=foo.ico

コマンドの解説

  • pyファイルへのパス:wxPythonを実行しているファイルパスを指定して下さい。 (app.MainLoop()を記載しているファイル) importしている関連ファイルは、指定しなくても、自動的に読み込まれます。
  • –onefile:1つの実行ファイルにまとめる
  • -w:–noconsoleと同じ意味です。これがないと、実行時、バッググラウンドに、コンソール画面が表示されてしまう。
  • –icon:アイコンファイルを指定(このアイコンは、エクスプローラ等に表示されるアイコンです。 icoファイルだけでなく、jpgの指定も可能)

実行すると、「dist」フォルダが作られ、その中に、

  • ○○.app (○○は、指定したpyファイル名と同じ)

ファイルが作られます。

このコマンドでは、Pythonコード中で、ファイルパスを指定して読込んでいる「外部ファイル(画像ファイル等)」は、組み込まれません。

※ コマンドで指定した「アイコン画像」は、組み込まれます。

Windows版(exeファイルへのビルド)

Mac版のコマンドと全く同じです。

実行すると、「dist」フォルダが作られ、その中に、

  • ○○.exe (○○は、指定したpyファイル名と同じ)

ファイルが作られます。

Macとの違いは、ファイル形式(.app vs .exe)になります。

最後に

wxPythonの紹介記事、全7回と、長編シリーズになってしまいました。

全シリーズを読まれた方は、

  • 簡単なアプリを作って、配布する

事が、できるようになったかと思います。

wxPythonは、まだまだ奥が深いですが、ここまで来れば、ネット等で調べながら作っていけるかと思います。

また、WindowsとMacで、動作に微妙な違いがあります。

それぞれの環境で、動作を確認してから、配布する事をオススメします。

本記事が少しでも、皆様のお役に立てたら幸いです。

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