今回はPythonでGUIアプリケーションを作成することが出来る「wxPython」をご紹介します。
今回の目標はwxPythonで「Hello World」を出してそれをアプリケーション化(.exe/.app化)するところまでやります。
初心者向けの内容となりますので、冗長な表現や詳細をカットしている場合がございます。ご了承ください。
それでは、どうぞ!
今回の動作環境は次のとおりです。
ソフト | バージョン |
---|---|
Python | v3.7.1 |
wxPython | v4.0.4 |
Pythonのインストール
まずは、Pythonをインストールしましょう。下記の記事を参照してPythonをインストールしてみてください(Macの方向け)。
wxPythonのインストール
次にwxPythonをインストールします。次のコマンドを実行してwxPythonをインストールしましょう。
$ pip install wxPython
Successfully installed Pillow-5.4.1 wxPython-4.0.4
と表示されたら成功です。これで、PythonスクリプトからwxPythonが使えるようになりました。
Hello World
さて、wxPythonを使用して「Hello World」を出してみましょう。
ソースコード
次のコードを見てください。
import wx
class MyApp(wx.App):
def OnInit(self):
# フレームの用意
frame = wx.Frame(None, wx.ID_ANY, 'Hello World', size=(400,300))
# パネルの用意
panel = wx.Panel(frame, wx.ID_ANY)
# ラベルの用意
wx.StaticText(panel, wx.ID_ANY, "Hello World")
# フレームを表示する
frame.Show()
# Trueを返す
return True
if __name__ == "__main__":
# アプリケーションを呼び出す
app = MyApp(0)
app.MainLoop()
上記のコードの説明をします。
- 4行目でアプリケーションのメイン部となるクラスを作成しています。
- 5行目の
def OnInit(self):
にメインの処理を書いていきます。 - 7行目ではウィンドウとなるフレームを作成しています。ウィンドウのタイトルは「Hello World」、大きさは400×300です。
wx.ID_ANY
のところは自分でもID名を指定できますが、特にする必要はないため、wx.ID_ANY
を指定しておきます。 - 10行目ではウィンドウに乗せるパネルを作っています。
- 13行目で「Hello World」のラベルを作成しています。
wx.StaticText()
がラベルを作成する関数です。 - 16行目でフレームを表示します。
- 19行目でTrueを返します。これは必ずやってください。
- 23行目が最初に呼ばれる処理です。ここで、上記の処理の初期化を行います。
- 24行目で実際にアプリケーションが実行されます。
実行結果
上記のソースコードを.py形式のファイルで保存してください。そして次のコマンドを入力してください(ファイル名は各自変更)。
$ python helloworld.py
Macの場合は次のコマンドを使用してください。
$ pythonw helloworld.py
発展
これでは少し味気ないので、文字を大きくし、中央寄せして見栄えを良くしてみましょう。
そのプログラムが次のコードとなります。
import wx
class MyApp(wx.App):
def OnInit(self):
# フレームの用意
frame = wx.Frame(None, wx.ID_ANY, 'Hello World', size=(400,300))
# パネルの用意
panel = wx.Panel(frame, wx.ID_ANY)
# Sizerの用意
main_sizer = wx.BoxSizer(wx.VERTICAL)
sizer = wx.BoxSizer(wx.HORIZONTAL)
# ラベルの用意
text_hello_world = wx.StaticText(panel, wx.ID_ANY, "Hello World")
# フォントの変更
font = wx.Font(25, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
text_hello_world.SetFont(font)
# ラベルを貼り付け
sizer.Add(text_hello_world, 0, wx.CENTER)
# sizerを中央寄せ
main_sizer.AddStretchSpacer()
main_sizer.Add(sizer, 0, wx.CENTER)
main_sizer.AddStretchSpacer()
# sizerをパネルにセット
panel.SetSizer(main_sizer)
# フレームを表示する
frame.Show()
# Trueを返す
return True
if __name__ == "__main__":
# アプリケーションを呼び出す
app = MyApp(0)
app.MainLoop()
さっきのソースコードから追加されたのが、11〜12行目、18〜19行目、22〜30行目です。それぞれ解説して聞きます。
- 11〜12行目でBoxSizerを用意しています。これは要素を縦方向や横方向へ連続して配置するための部品です。中央寄せをするときにも使用します。画面中央に寄せるには2つのBoxSizerが必要なので2つ用意しています。
- 15行目に変数を追加しています。
- 18〜19行目ではラベルのフォントを変更しています。
wx.Font()
で好きなフォントを用意し、.SetFont()
でフォントを適用します。今回は、フォントの大きさを25に変更しています。 - 22行目ではsizerに対しラベルを追加しています。
- 25〜27行目で画面中央寄せしています。イメージとしては
main_sizer.AddStretchSpacer()
で上下にスペースを作ってsizer
を中央に持ってくるといった感じです。 - 30行目でパネルに
main_sizer
をセットしています。
実行結果
先程より見栄えが良くなったかと思います。
PyInstallerでアプリケーション化
PyInstallerというソフトを使って先程のスクリプトをアプリケーション(.app/.exe)化してみましょう。
PyInstallerはwxPythonなどで作ったPythonスクリプトをWindowsやMac用の実行ファイルに変換してくれるソフトです。
早速使ってみましょう!
インストール
インストールは次のコマンドで行います。
$ pip install pyinstaller
そうしたら次コマンドを入力してちゃんとインストールされているか確認してください。
$ pyinstaller -v
3.4
specファイルの作成
pyinstallerで実行ファイルを作るためにはspecファイルを作るのが一般的です。specファイルとは以下のようなファイルです。specファイルではPythonが使えます。
# -*- mode: python -*-
import platform
import os
WINDOWS = (platform.system() == "Windows")
LINUX = (platform.system() == "Linux")
MAC = (platform.system() == "Darwin")
EXE_DEST = "HelloWorld" if not WINDOWS else "HelloWorld.exe"
PATHEX = [os.path.dirname(os.path.abspath(SPEC))]
if WINDOWS:
PATHEX.append('C:\\Program Files (x86)\\Windows Kits\\\Redist\\ucrt\\DLLs\\x86')
PATHEX.append('C:\\Program Files (x86)\\Windows Kits\\\Redist\\ucrt\\DLLs\\x64')
a = Analysis(['helloworld.py'],
pathex=PATHEX,
hiddenimports=[],
hookspath=None,
runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=EXE_DEST,
debug=False,
strip=None,
upx=False,
console=False)
if MAC:
app = BUNDLE(exe,
name=EXE_DEST + '.app',
info_plist={
'NSHighResolutionCapable': 'True'},
)
このファイルではWindowsやMacでも動作するように記述しています。詳しい説明はこちらのページに書いてあります。
簡単に上記を説明すると
* 9〜12行目でパスを追加しています。これがないと必要なモジュールが参照できない場合があります。
* 14行目で.pyファイルを解析しています。
* 20行目でexeファイルの作成を行います。オプションは上記サイトで確認。
* 30行目以降はMac向けの処理となります。ここで.appファイルを作成します。NSHighResolutionCapable
を設定しておくとRetinaディスプレイに対応できます。
PyInstallerを実行
上記で作ったspecファイルを使ってPyInstallerを実行してみましょう。下記コマンドを実行してください。
$ pyinstaller helloworld.spec
そうすると下記のように実行が開始されます。
49 INFO: PyInstaller: 3.4
49 INFO: Python: 3.7.1
58 INFO: Platform: Darwin-18.2.0-x86_64-i386-64bit
64 INFO: UPX is available.
66 INFO: Extending PYTHONPATH with paths
実行が終わると、distフォルダに「helloworld.exe」または「helloworld.app」が作成されています。それを実行するとアプリケーションが起動します。
動作確認
「helloworld.exe」または「helloworld.app」を実行してみましょう。
終わりに
今回はwxPythonを使用してHelloWorldを表示しアプリケーション化するところまで説明しました。
初心者向けの内容でしたので「さらなる情報を知りたいよ」という方向けに有用なリンクをご紹介します。
今後はwxPython以外にもPySide2などのGUIアプリケーションについてもご紹介できたらなと考えています。
それでは、また!
コメント