ライブラリで簡単!Pythonでソフトウェアを作成する方法

Pythonでソフトウェアを作ってみたい!
ソフトウェアを作るにはどのライブラリが良いんだろう?

Pythonには様々なGUIアプリケーション作成ライブラリがあります。どれを使えば良いのか、どうやって作れば良いのかと混乱している方、いるんじゃないんでしょうか。

こんにちは!ライターのフクロウです。Pythonのインストラクターもしています。

この記事では、Tkinterを始めとしたPythonで使えるGUIアプリ作成ツールを紹介していきます。

また、簡単なソフトウェアの作成例も紹介しますので、Pythonで簡単にソフトウェアを作ってみたい方は是非ご覧下さい。

この記事はこんな人のために書きました。

  • Pythonのif文、for文、関数などの使い方が分かる人
  • Pythonを使ってソフトウェア(GUIアプリケーション)が作りたい方

この記事で紹介するソフトウェアとは

ソフトウェアとはプログラムの総称ですが、この記事では特にGUIアプリケーションの作成について注目します。

GUI(グラフィカルユーザーインターフェース)は、Terminal上で動くCUI(キャラクターユーザーインターフェース)とは違い、マウスで動かしたり目で見てどう動かせばいいか分かるようなアプリケーションのことを指します。

エクセルやワードなどを想像してもらえればOKです。

Pythonから使えるGUIアプリ作成ツール

Pythonでは様々なGUI作成ツールが公開されています。まずはこれらを掻い摘んで紹介します。

Tkinter

Tkinter

TkinterはPythonでGUIを作るための標準ライブラリです。GUIツールキットTkをPythonから使えるようにしたもので、基本的なアプリケーションはこれで作成可能です。

Tkinterのメリット

標準ライブラリとして公開されているので、pip installなどであとからインストールする必要はありません。

Tkinterのデメリット

今のバージョンではほぼ解決された(と僕は思っています)が、見た目が少し古臭いと感じるかもしれません。

また、元になったTkに沿って作られているので、細かいところをチューニングするにはTkの知識が必要になるかもしれません。

Kivy

https://kivy.org/

Kivyは比較的新しいGUIライブラリです。かっこいい見た目のGUIアプリケーションが作れて、最近はブログ記事も増えてきました。

インストールはここを参考にしてください。

Kivyのメリット

  • アプリの見た目がかっこいい
  • ゲーム開発も可能!
  • クロスプラットフォーム対応
  • ドキュメントが日本語に翻訳されている


クラスプラットフォームとは

異なる環境でも同じものが作れる環境のことを言います。たとえば、Windowのアプリケーションだけでなく、スマートフォンアプリも作成する事ができ、Pythonでなんでも作りたい!という方にはおすすめです。

Kivyへようこそ

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()

コード中のコメントに関数の解説を追加しました。

最も基本的な考え方としては

  1. tkinter.~に用意されたButtonやEntry(テキストボックス)などのクラスからインスタンスを作成。
  2. インスタンス.pack()でレイアウトに追加

になります。詳しくはPythonのドキュメントに解説がありますが、Pythonのクラスの使い方がわかれば実装は簡単です。

また、ここでは解説のために処理をべた書きしています。本格的に作る場合はtf.Frameを継承したクラスを作って、その中で実装していくことをお勧めします。

このプログラムを実行するには、Terminalでpython myapp.pyと入力します。するとアプリケーションが起動するので、実際に試してみてください。

アプリケーション動作例

まとめ

この記事ではPythonを使ったソフトウェア作成について、特にGUIアプリケーション作成ライブラリを紹介しました。

Tkinterは広く使われているGUI作成ツールで、公式ドキュメント以外にも情報を簡単に見つけることが出来ます。例えばmatplotlibと組み合わせて使えば、手軽にリアルタイム可視化システムが作れますね。

プログラマ以外の人にはCUIアプリケーションの利用は敷居が高いため、外部公開するアプリはGUIを作りたくなります。

ここで紹介したツールを使えば簡単にGUIアプリが開発できるので、是非挑戦してみてください。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。