ソフトウェアを作るにはどのライブラリが良いんだろう?
Pythonには様々なGUIアプリケーション作成ライブラリがあります。どれを使えば良いのか、どうやって作れば良いのかと混乱している方、いるんじゃないんでしょうか。
こんにちは!ライターのフクロウです。Pythonのインストラクターもしています。
この記事では、Tkinterを始めとしたPythonで使えるGUIアプリ作成ツールを紹介していきます。
また、簡単なソフトウェアの作成例も紹介しますので、Pythonで簡単にソフトウェアを作ってみたい方は是非ご覧下さい。
この記事はこんな人のために書きました。
- Pythonのif文、for文、関数などの使い方が分かる人
- Pythonを使ってソフトウェア(GUIアプリケーション)が作りたい方
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
この記事で紹介するソフトウェアとは
ソフトウェアとはプログラムの総称ですが、この記事では特にGUIアプリケーションの作成について注目します。
GUI(グラフィカルユーザーインターフェース)は、Terminal上で動くCUI(キャラクターユーザーインターフェース)とは違い、マウスで動かしたり目で見てどう動かせばいいか分かるようなアプリケーションのことを指します。
エクセルやワードなどを想像してもらえればOKです。
Pythonから使えるGUIアプリ作成ツール
Pythonでは様々なGUI作成ツールが公開されています。まずはこれらを掻い摘んで紹介します。
Tkinter
TkinterはPythonでGUIを作るための標準ライブラリです。GUIツールキットTkをPythonから使えるようにしたもので、基本的なアプリケーションはこれで作成可能です。
Tkinterのメリット
標準ライブラリとして公開されているので、pip installなどであとからインストールする必要はありません。
Tkinterのデメリット
今のバージョンではほぼ解決された(と僕は思っています)が、見た目が少し古臭いと感じるかもしれません。
また、元になったTkに沿って作られているので、細かいところをチューニングするにはTkの知識が必要になるかもしれません。
Kivy
Kivyは比較的新しいGUIライブラリです。かっこいい見た目のGUIアプリケーションが作れて、最近はブログ記事も増えてきました。
インストールはここを参考にしてください。
Kivyのメリット
- アプリの見た目がかっこいい
- ゲーム開発も可能!
- クロスプラットフォーム対応
- ドキュメントが日本語に翻訳されている
- クラスプラットフォームとは
- 異なる環境でも同じものが作れる環境のことを言います。たとえば、Windowのアプリケーションだけでなく、スマートフォンアプリも作成する事ができ、Pythonでなんでも作りたい!という方にはおすすめです。
Kivyのデメリット
これはメリットに書いても良いかもしれませんが、KivyではGUIのレイアウトを作るのに、Kv Languageという独自言語を使います。
アプリケーションの見た目をソレ以外の処理と分離できるのは見通しが良くなって素晴らしいのですが、Kv言語が簡単とはいえ人によっては覚えるのが大変かもしれません。
その他
上で紹介したもの以外にも、PythonでGUI作成ができるライブラリはたくさんあります。どれも一長一短があります。調べてみて好みのものを見つけてください。
Electron + Eel
HTML/CSS/javaScriptなどのWebの技術でGUIアプリが作れるツール。Eelを使ってPythonと連携も可能。
PyQt
TkinterのようなGUI作成ツール。侍でも紹介記事を公開している。
PyGame
Pythonでゲーム開発ができるツール。利用例もたくさんあり、ゲーム開発入門にうってつけ。
Tkinterを使ったアプリ作成
この記事では最も簡単(だろうと思われる)Tkinterを使って、PythonでGUIアプリを作ってみましょう。
作るアプリ
誕生日を入力すると、生まれてからの日数が分かるアプリ
GUIでやりたいこと
- 誕生日をtextboxに入力してもらい取得する
- 誕生日、今日の日付、生まれてから何日経ったかを表示する
それではプログラムを見てみましょう。
[myapp.py]
# -*- coding: utf8 -*- import sys import tkinter import datetime # 今日の日付 today = datetime.datetime.now() # アプリの枠を作ってタイトルを表示 root = tkinter.Tk() root.title("あなたが生まれてから何日経った?") root.geometry("400x300") # Windowサイズ # アプリ中に表示する文字 labeltext = tkinter.Label(text="誕生日を入力:") labeltext.pack() # レイアウトに追加 # テキストボックス editbox = tkinter.Entry() editbox.insert(tkinter.END, "1990/2/20") editbox.pack() # ボタンが押された際に行う計算 def print_diff(event): birthday = toolz.pipe( editbox.get(), lambda date: datetime.datetime.strptime(date, "%Y/%m/%d") ) diff = today-birthday tkinter.Label( text=f""" 今日:{today.year}/{today.month}/{today.day} 誕生日:{birthday.year}/{birthday.month}/{birthday.day} あなたが生まれてから{diff.days}日が経過しました。""" ).pack() # ボタン btn = tkinter.Button(root, text="Go!") btn.bind("<Button-1>", print_diff) # 押下時の処理を追加 btn.pack() root.mainloop()
コード中のコメントに関数の解説を追加しました。
最も基本的な考え方としては
- tkinter.~に用意されたButtonやEntry(テキストボックス)などのクラスからインスタンスを作成。
- インスタンス.pack()でレイアウトに追加
になります。詳しくはPythonのドキュメントに解説がありますが、Pythonのクラスの使い方がわかれば実装は簡単です。
また、ここでは解説のために処理をべた書きしています。本格的に作る場合はtf.Frameを継承したクラスを作って、その中で実装していくことをお勧めします。
このプログラムを実行するには、Terminalでpython myapp.pyと入力します。するとアプリケーションが起動するので、実際に試してみてください。
まとめ
この記事ではPythonを使ったソフトウェア作成について、特にGUIアプリケーション作成ライブラリを紹介しました。
Tkinterは広く使われているGUI作成ツールで、公式ドキュメント以外にも情報を簡単に見つけることが出来ます。例えばmatplotlibと組み合わせて使えば、手軽にリアルタイム可視化システムが作れますね。
プログラマ以外の人にはCUIアプリケーションの利用は敷居が高いため、外部公開するアプリはGUIを作りたくなります。
ここで紹介したツールを使えば簡単にGUIアプリが開発できるので、是非挑戦してみてください。