Pythonで簡易的なGUI作成ができるライブラリ「Gooey」

お疲れ様です。
今回はちょっとしたライブラリ紹介的な記事です。

Pythonで使用できる「Gooey」というライブラリをですが、Pythonスクリプトを簡単にGUI化できます。結構前から使っていたのですが日本語の記事がほぼ無いのでせっかくなのでまとめようと思います。
(自分用の備忘録としても残しておきたいといういつもの動機です笑)

Gooeyの公式GitHubリポジトリはこちらです。
github.com

また、公式の実装例もありますので気になる方はこちら。
github.com


Gooeyの概要

Pythonの標準モジュールの「argparse」を使用し、コマンドライン引数にあたる部分を入力するフォームと、実際に実行されるときのコマンドライン上のログを表示するGUIを作成するというライブラリです。
詳しくは下記で実装しているのでご参考に。

例えば、argparseを使って書かれた下記のようなコードがある場合

from argparse import ArgumentParser

def main() -> None:
    parser = ArgumentParser(description="サンプルプログラムです。")

    parser.add_argument("number", type=int, help='数値を入力')
    parser.add_argument("-s", "--string", type=str, default="サンプル文字列", help='文字列を入力')
    parser.add_argument("--flag", action='store_true')    
    parser.add_argument("--choice", default="Google", choices=['Google', 'Apple', 'Facebook', 'Amazon'])
    parser.add_argument("--list", nargs='*', 
                        choices=['Microsoft', 'Amazon', 'Tesla', 'Alphabet', 'NVIDIA', 'Apple'])

    args = parser.parse_args()  

    print("number", args.number)
    print("string", args.string)
    print("flag", args.flag)
    print("choice", args.choice)
    print("list", args.list)

if __name__ == "__main__":
    main()

実行する場合、例えば下記のコマンドなら出力は下図のようになります。

python sample.py 2025 --list Microsoft

これをGooeyを使用してGUI化すると、コマンド入力の部分が下図の[入力画面]、実行結果が下図の[実行画面]となります。
[入力画面]
[実行画面]
実装に関しては先ほどのargparseのサンプルコードのmain関数にデコレータで

@Gooey

と付けるのみです。

from argparse import ArgumentParser
from gooey import Gooey

@Gooey 
def main() -> None:
    parser = ArgumentParser(description="サンプルプログラムです。")

    # 以下同様のコード…

Gooeyを使うメリット・デメリット

基本的には「簡易的にGUI化できる」という1点にメリットが集約されているというのが個人的な認識です。プロトタイプの作成なんかに便利です。
デメリットで一番大きいのが「カスタマイズ性が低い」ことでしょうか…。概要で説明した形の機能しか基本使えません。ベースがwxPythonなのでライブラリのソースを改造することもできるかもしれませんが試したことはないです。

👍ポイント

  • 簡易的なGUIを簡単に作成できる
  • 導入も簡単(pip installするだけ)

👎ポイント

  • カスタマイズ性が低い
  • argparseについての知識は必要
  • ライブラリの更新が止まっている

実際に実装する場合

公式GitHubのREADMEにかなり詳しく書かれているのでそちら参照。 また、参考サイトは海外のサイトですが、各フォームの細かい設定などめちゃくちゃ詳しく解説してくれているので深く知りたい方はこちらを見るのが良いと思います。(ただしちょっと情報が古いので使えない内容もあるかも…。)
基本的には下記のサイトで事足りますが、日本語化の部分だけメモ的な形で残しておきます。

参考サイト

pakstech.com

日本語化

日本語化自体は元から可能ですが日本語がかなり怪しかったり、ところどころ日本語化できてないところがあります。 修正する場合はインストールしたGooeyライブラリのフォルダ内にある「japanese.json」を編集します。

site-packages\gooey\languages\japanese.json

もしくは自身で言語ファイルを作成してプロジェクトフォルダ内に配置しておくことも可能です。下記は実行ファイルと同じ階層に言語フォルダを配置した例です。

from argparse import ArgumentParser
from gooey import Gooey

@Gooey(
    language="japanese",
    language_dir="./language"
)
def main() -> None:
    parser = ArgumentParser(description="サンプルプログラムです。")

    # 以下同様のコード…

ざっくりと直してみました。

ソースコード

私が作成したコードは下記に残していますので、必要に応じてご確認ください。
github.com