LoginSignup
17
30

More than 5 years have passed since last update.

Py2appとTkinterでネイティブっぽいGUIアプリを作る

Last updated at Posted at 2017-01-06

はじめに

PythonでGUIアプリを作ったことがなかったなと思ったのでトライしてみました。

また、GUIのスクリプトだけ書くのも面白くないので、そのスクリプトをMacのネイティブアプリ形式で出力、実行できるようにしてみました。

使うもの

  • Tkinter
    Pythonに標準搭載されているGUIライブラリ。(正しく言うとTcl/Tkへのインターフェース)
  • Py2app
    作ったPythonプログラムをMacのアプリケーション実行形式(app)に変換するツール。

コード

tkinterの公式ドキュメントに記載されていたコードをほぼそのままもってきた。

変更した部分はsay_hiメソッドがprint文でメッセージ出力するものだったので、そこをメッセージボックスを出すようにしてみました。

途中、Tkinterのモジュールを全てインポートしているにもかかわらず、tkMessageBoxクラスが見つからないと言われ少しだけ苦戦。(tkMessageBoxクラスがトップレベルのクラスだとは思わなかった。。。)

tk.py
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()

実行するとこんな感じ。

main window

Helloをクリックしてみます。

info message

はい、無事メッセージボックスが出てきました。
結果としてはちょっとさみしいですが、このまま進めます。

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ディレクトリ以下へファイルが配置されます。

dist

そのファイルをダブルクリックすると無事実行されました!かなり簡単ですね。
PythonでGUIアプリを書くのがだいぶハードルが低いことがわかったので、いろいろ試してみたいと思います。

参考

17
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
30