はじめに
PythonでGUIアプリを作ったことがなかったなと思ったのでトライしてみました。
また、GUIのスクリプトだけ書くのも面白くないので、そのスクリプトをMacのネイティブアプリ形式で出力、実行できるようにしてみました。
使うもの
- Tkinter
Pythonに標準搭載されているGUIライブラリ。(正しく言うとTcl/Tkへのインターフェース) - Py2app
作ったPythonプログラムをMacのアプリケーション実行形式(app)に変換するツール。
コード
tkinterの公式ドキュメントに記載されていたコードをほぼそのままもってきた。
変更した部分はsay_hi
メソッドがprint
文でメッセージ出力するものだったので、そこをメッセージボックスを出すようにしてみました。
途中、Tkinterのモジュールを全てインポートしているにもかかわらず、tkMessageBoxクラスが見つからないと言われ少しだけ苦戦。(tkMessageBoxクラスがトップレベルのクラスだとは思わなかった。。。)
from Tkinter import *
import tkMessageBox
class Application(Frame):
def say_hi(self):
tkMessageBox.showinfo('info', 'hi there, everyone!')
def createWidgets(self):
self.QUIT = Button(self)
self.QUIT["text"] = "QUIT"
self.QUIT["fg"] = "red"
self.QUIT["command"] = self.quit
self.QUIT.pack({"side": "left"})
self.hi_there = Button(self)
self.hi_there["text"] = "Hello",
self.hi_there["command"] = self.say_hi
self.hi_there.pack({"side": "left"})
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()
root = Tk()
app = Application(master=root)
app.mainloop()
root.destroy()
実行するとこんな感じ。
Helloをクリックしてみます。
はい、無事メッセージボックスが出てきました。
結果としてはちょっとさみしいですが、このまま進めます。
Py2appでつつむ
まずはPy2appをpipで入れちゃいましょう。
$ pip install py2app
チュートリアルに沿っていくとまずはsetup.pyが必要なようです。py2applet
という便利コマンドがあるようなので、それを利用しsetup.pyを作成します。
$ py2applet --make-setup tk.py
そしてsetup.pyを実行し、appを作ります。
$ python setup.py py2app
2017/02/09 修正 -Aパラメータをつけるとほかの環境から実行できないので上記コマンドから取り除きました。
完成すると以下のようにdistディレクトリ以下へファイルが配置されます。
そのファイルをダブルクリックすると無事実行されました!かなり簡単ですね。
PythonでGUIアプリを書くのがだいぶハードルが低いことがわかったので、いろいろ試してみたいと思います。