本記事は、
- Pythonのスキル、初心者以上の方
- wxPython、入門レベル以上の方
を対象にした内容になっております。
本記事は、連載記事となっています。(全7回)
一連の記事を読むことで、
- かっこよくて
- おしゃれな
「簡単なGUIアプリ」を作成できるようになります。
例えば、wxPythonで、画像表示アプリを作ってみました。
上記みたいな、見た目(Macの場合)となります。
本記事は、下記の続編となります。
本記事のゴール
- ビルド前の設定項目
- ウインドウサイズの設定
- ウインドウスタイルの設定
- アイコンの設定
- 実行ファイルへの、ビルド方法
を習得する事にしています。
ビルド前の設定項目
この章では、
- ウインドウサイズの設定
- ウインドウスタイルの設定
- アイコンの設定方法、
をご紹介します。
本章にて追加する、コード
下記を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の公式ドキュメントをご覧ください。
実行ファイルへの、ビルド方法
- ビルドに必要な、パッケージの紹介
- Mac版(appファイルへのビルド)
- Windows版(exeファイルへのビルド)
の順番で、ご説明します。
- Windows用のアプリは、Windowsから
- Mac用のアプリは、Macから
ビルドする必要があります。
Windowsアプリを、Macからビルドはできません。
ビルドに必要なパッケージ
PyInstallerを使用するのが、簡単です。
pipを使用するのが、簡単です。
pip install pyinstaller
pipに関して、詳細を知りたい方は、下記記事が参考になります。
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で、動作に微妙な違いがあります。
それぞれの環境で、動作を確認してから、配布する事をオススメします。
本記事が少しでも、皆様のお役に立てたら幸いです。
また、お会いしましょう!