Morikatron Engineer Blog

モリカトロン開発者ブログ

PythonのGUIフレームワーク「Dear PyGui」の紹介

どうも、モリカトロン株式会社でエンジニアおじさんを営んでいる岡島です。

お仕事でプログラムを書いていると、ときどきGUIアプリケーションを作る必要が出てきてきます。 そういう場合今まではPythonのQtバインディングであるPyQtPySide(Qt for Python)を使っていたのですが、これらには

  • pip installとは別にQtのインストールが必要(インストールには割と時間がかかる)
  • 高機能で色々なことが出来る反面、覚えないといけないことが多い(すぐに忘れるので都度調べることになる)

という不満がありました。ちょっとしたGUIアプリケーションを作るなら、シンプルで簡単に使えるフレームワークが良い…
(Pythonに標準搭載されているtkinterもちょっと苦手です)

ということで今回は最近使い始めたGUIフレームワーク「Dear PyGui」を紹介します。

Dear PyGuiとは

ゲーム業界界隈だと知っている人も結構多いC++向けのGUIフレームワーク「Dear ImGui」のPython版がDear PyGuiです。 Dear ImGuiと同じく、プログラマーが開発用のツールなどのGUIを作成するのに適したフレームワークと言えるでしょう。

github.com

日本語の紹介記事を探してもあまり見つかりませんが、GitHubリポジトリのスター数は5,000を超えていますし、TryolabsのTop Python libraries of 2020にも選ばれているようなので、誰も使っていないマイナーフレームワークという訳でもありません。安心して使って良さそうですね。 tryolabs.com

使い方/始め方

最初は日本語紹介記事がほとんど無くてちょっと心配だったんですが、フレームワーク自体も公式ドキュメントもシンプルで分かりやすく作られているので全く困りませんでした。

インストール

GitHubのREADMEにある通り、pip install dearpygui で一発です。

最初の一歩

インストールが完了したら、公式ドキュメントのExamples に機能ごとのサンプルコードが用意されているので、まずはこれを写経したり、改変してみましょう。

github.com

Dear PyGuiのExamplesは実行結果の画像をクリックしたらサンプルコードが表示されるという構成になっていて、個々のサンプルプログラムはどれもシンプルで短いです。 なのでPythonが読み書きできれば、自然言語が不得意な方でも容易に理解できるんじゃないでしょうか。

わからないことがあったら

あたりまえですが、公式のドキュメントを読みましょう。

github.com

こちらはExamplesと違い英語で書かれていますが、トップページ以外は文章の量が少なく画像とサンプルコードを交えて簡潔に説明するようになっています。
このドキュメントとAPIリファレンスを片手にExampleのコードを弄っていれば、すぐに「Dear PyGui完全に理解した」と言えるレベルに到達するでしょう。

ムチャクチャ良く出来たドキュメントなので、技術者向けのドキュメントを書く際の参考にしたい!

Tips

「簡単に使えます。おしまい。」では寂しすぎるので、自分が触っていて気づいたことをいくつか紹介します。

日本語の表示

何も考えずにDear PyGuiで日本語を表示させようとすると文字化けします。
これについては公式ドキュメントで触れられており、Dear PyGuiが日本語に対応していないわけではなく、デフォルト設定が英語なので表示できないというだけみたいです。

github.com

上記リンクの通り、日本語フォントを add_additional_font 関数で追加して、第三引数に "japanese" を指定すれば日本語も表示できるようになります。
無料で利用できる日本語フォントは例えばGoogle Fontsで配布されていますので、ダウンロードしてプログラムの最初で add_additional_font しておくようにすると良いでしょう。

OS標準のファイルダイアログを使用する

Dear PyGuiは特定のOSの機能を利用しません。そのため、標準で用意されているファイルダイアログは以下のような独自実装のダイアログになっています。

f:id:morika-okajima:20210507120101p:plain

個人的にはこれはちょっと使いにくい…… 使い慣れたOS標準のダイアログが恋しくなります。

そこで、僕は以下のようにPython標準のGUIフレームワークであるtkinterのファイルダイアログを利用するようにしています。
(冒頭で書いた通りGUIすべてをtkinterで書くのは嫌だけど、このくらいならアリかな。)

ファイルを開きたい場合なら…

import tkinter
import tkinter.filedialog as filedialog
 
root = tkinter.Tk()
root.withdraw()  # ルートウィンドウを非表示に設定
file_path = filedialog.askopenfilename()
root.destroy()  # 非表示になっているtkinterのウィンドウを削除する

のように、ファイルダイアログを呼び出すときにだけtkinterを使うことで、Dear PyGuiで作ったGUIからOS標準のファイルダイアログを呼び出します。

GitHub にもサンプルプログラムを用意しておきますので、そちらもご確認ください。

github.com

pyinstallerで実行可能ファイルを作る際の注意

pythonで作ったプログラムを配布する場合、pyinstallerを使って実行可能ファイルを生成することがあります。 Dear PyGuiで作ったプログラムもpyinstallerを使って実行可能ファイルにすることが出来るのですが、Windows 環境ではちょっとだけ注意が必要でした。

--onefile オプションを使って1ファイルにまとめてしまう場合、--add-data オプションで同梱したフォントファイルが add_additional_font 関数で読み込めません。

exeに埋め込んだフォントを読み込みできないというのが理由のようです。
--onefile オプションを付けないか、別途フォントファイルを用意することで正しく動作するので、外部のフォントを利用する場合にはどちらかの方法で上記の問題を回避すると良いかと思います。

おわりに

使用を始めて一ヵ月くらい経過しましたが、今のところは不便もなく非常に便利なフレームワークだと感じています。 少ないコードで記述できるシンプルなフレームワークなので、しばらく使わなくて忘れてしまっても容易に思い出せるでしょう。(これは個人的に非常に重要なポイント)

PythonでGUIアプリケーションを作る場合にはPySideを使っている人が多いんじゃないかと思いますが、用途によってはDear PyGuiの方が適していることもあると思いますのでお手すきの際に一度試してみてはいかがでしょうか?

「toio SDK for Unity」v1.1.0の更新

はじめまして、モリカトロン株式会社・AIエンジニアの舒(ジョ)と申します。今年4月からモリカトロンに入社しました。大学と院生の専門は機械電子システムで、機械学習に触れたこともあります。

会社の皆と一緒に「toio SDK for Unity」一部の開発に参加して、いろいろな知識を学びました。 まず、「toio SDK for Unity」とは何かを紹介させていただきます。

  • 「toio SDK for Unity」
    • v1.0
  • v1.1
    • 1. 姿勢検出
    • 2. ダブルタップ検出
    • 3. モーター速度検出
    • 4. シェイク検出
    • 5. 目標指定付きモーター制御
    • 6. 加速度付きモーター制御
  • 検出できる状態のシミュレータ
  • 最後に
続きを読む

UE4.26 に新規追加されたUE4MLを試す

どうも、モリカトロン株式会社でプログラマおじさんを営んでいる岡島です。

先日正式リリースされた Unreal Engine 4.26.0 に UE4ML という機械学習関係っぽい名前のプラグインが追加されたという情報を見つけたので、早速試してみました。

UE4ML はブログ執筆現在、公開されたばかりの実験的機能です。
README.md には、まだこの仕組みを使ってトレーニングした例がない(見せられるものという意味だと思いますが…)と書かれている点をご留意ください。

  • UE4ML とは?
    • 対応プラットホームは現状Windowsのみ
  • サンプルを動かしてみる
    • Unreal Engine 4側の作業
    • Python 側の作業
    • 公式の手順
    • 実行エラーを回避して動作させる
  • 最後に
  • おまけ
続きを読む

自動微分+XLA付き機械学習フレームワークJAXを使用してMNISTを学習させてみる

こんにちは、エンジニアの竹内です。
深層学習を行う際によく利用されるフレームワークといえばGoogleが開発しているTensorflowとFacebookが開発しているPytorchの2大巨頭に加えて、Kerasなどが挙げられるかと思いますが、今回はそのような選択肢の一つとしてGoogleが新しく開発している*1新進気鋭(?)の機械学習フレームワークJAXを紹介したいと思います。
github.com

*1:あくまでリサーチプロジェクトの一つであり、公式の製品では無いらしいです。

続きを読む

AIネット対戦システムの紹介2

こんにちは、モリカトロン株式会社チーフエンジニアの松原です。

前回記事(AIネット対戦システムの紹介 - Morikatron Engineer Blog)に続きまして、AIネット対戦システムのAIクライアント(ゲームをプレイするためのプログラム)を紹介いたします。まずは「ゲームをプレイするプログラム」の仕組みについて、プログラマ以外の方でもわかるよう説明してみます。そして後半はAIネット対戦システム上でリバーシのランダムプレイヤーを実現するプログラムコードを紹介します。

 目次

  • はじめに
  • 「ゲームをプレイする」プログラムとは
  • リバーシをプレイするプログラムコード
  • 思考ルーチンに渡されるデータ
  • 思考ルーチンの内容
  • より強い思考ルーチン
  • おわりに
続きを読む

可搾取量(exploitability)で不完全情報ゲームの戦略を評価する

こんにちは、エンジニアの竹内です。
以前のブログ記事【CFR】不完全情報ゲームを学習するAIを実装してみる【KuhnPoker】 - Morikatron Engineer Blogにて二人不完全情報ゲームのナッシュ均衡を計算的に求めるCounterfactual Regret Minimizationというアルゴリズムを紹介しました。
その際、最終的に得られた戦略プロファイルが解析的に計算されたナッシュ均衡と近い値をとっているかを確認することでアルゴリズムの正当性を示していました。
しかし、この方法では「戦略の更新を繰り返すたびにナッシュ均衡に近づいているのか」がわからないだけでなく、そもそも解析的にナッシュ均衡を計算できないゲームについては最終的に得られた戦略プロファイルを評価することができません。

そこで今回は、二人不完全情報ゲームにおける戦略プロファイルを評価する際に有効な「可搾取量(exploitability)」という指標を紹介し、前回Pythonで実装したCFRアルゴリズムに組み込んでいきたいと思います。

  • 可搾取量とは
    • 可搾取量の定義
      • 定義
    • 可搾取量の具体的なイメージ
  • 実装
    • 大枠
    • 最適反応戦略と可搾取量の計算
    • 正しく実装できているかチェック
    • CFRアルゴリズムのパフォーマンス
  • まとめ
  • Reference
続きを読む

CEDEC2020の補足 ー格闘ゲーム編その3ー

どうも、モリカトロンのプログラマおじさん、岡島です。 CEDEC からだいぶたってしまいましたが、前回 からの続きで 接待プレイについての補足などをしていこうと思います。

  • 「接待」について
  • そもそもなんで接待プレイをAIにさせたかったのか
  • 接待プレイの中身について
  • 原理的には「学習後に調整ができるAI」なので接待以外にも
  • 最後に
続きを読む