31
EasyGUI でグラフィカル Python アプリを作成する方法
イージーギ
(画像提供:Tom's Hardware)

PythonでGUI(グラフィカルユーザーインターフェース)アプリケーションを作るとなると、選択肢は本当に豊富です。Tkinter、PyGame、GUIZero、そして私のお気に入りのEasyGUIなどがあります。

EasyGUIは古いツールです。2015年にPythonを教えるために使っていました!でも、名前の通り使いやすいので、10年以上経った今でも使い続けています。複数のOSで使えるので、ダイアログのサイズや位置を細かく指定する必要がありません。EasyGUIに特定の種類のダイアログが欲しいと伝えるだけで、タイトル、メッセージ、インターフェースを指定してダイアログを作成してくれます。PyGame、GUIZero、あるいは他のGUIツールキットの方が優れているとコメント欄で教えていただけるかもしれません。もしそうなら、ぜひあなたの知識を共有してください。共有することで学ぶことができますので、皆さんのご意見をぜひお聞かせください。

説明のためにスクリーンショットをいくつか撮りました。

画像

1

6

イージーギ
(画像提供:Tom's Hardware)

すべてのオプションを確認するには、まずEasyGUIをインストールする必要があります。この手順を実行するには、お使いのコンピュータにPythonがインストールされている必要があります。Windowsマシン向けのガイドも用意していますが、Linuxユーザーの場合は既にインストールされているはずです。

1.コマンドプロンプト/ターミナルを開きます。Windowsユーザーの場合は、スタートメニューからアクセスできます。

2. pipを使ってEasyGUIをインストールします。pipはPythonの組み込みパッケージマネージャーです。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

pip.exe install easygui

3. Python インタープリターを起動します。

python -i

4. EasyGUIモジュールをインポートします。モジュールをインポートする際に、EasyGUIの名前をegに短縮しました。これにより使いやすくなります。

import easygui as eg

5.デモ関数を呼び出して、様々なダイアログオプションをすべて確認します。デモを終了するには、ダイアログウィンドウを閉じます。

eg.egdemo()

ダイアログを作成するには、まずダイアログの種類を指定し、次にパラメータを渡します。例えば、タイトル、メッセージ、選択肢を持つこのシンプルなボタンボックスを考えてみましょう。タイトルはダイアログのタイトル、メッセージはユーザーへのメッセージ、選択肢はボタンとなる選択肢のPythonリストです。選択肢をクリックすると、その選択肢がPythonシェルに表示されます。また、後で使用するために変数に保存することもできます。

イージーギ

(画像提供:Tom's Hardware)

プロジェクト: Python で作る ToDo リスト

イージーギ

(画像提供:Tom's Hardware)

私たちの目標はシンプルです。目標達成をサポートしてくれるToDoアプリを作ることです。このアプリはPythonで開発し、エンドユーザーが使いやすいようGUIを採用します。ToDoリストはJSON形式で外部ファイルに保存します。JSONモジュールのおかげで、PythonはJSONを簡単に扱えます。

画像

1

3

イージーギ
(画像提供:Tom's Hardware)

それで私たちは何をするつもりですか?

  • EasyGUI Python モジュールをダウンロードしてインストールします。
  • テキスト エディターで Python コードを記述します。
  • EasyGUI Python モジュールと、JSON 形式を使用してタスクをファイルに書き込むモジュールをインポートします。
  • タスクの表示、作成、削除を処理する関数を作成します。
  • アプリが動作するかをテストします。

PythonとEasyGUIモジュールがインストールされていることを前提に、テキストエディタを開いてコードを書き始めましょう。Windows 10 PCでNotepad++を使用します。

1.テキストエディタを開き、新しい空のファイルを作成します。ファイルをto-do.pyとして保存し、頻繁に保存することを忘れないでください。私はNotepad++を使用していますが、どのテキストエディタでも問題ありません。

2. easyguiモジュールをインポートし、次にJSONを使用するためのモジュールと基盤OSと連携するためのモジュールをインポートします。モジュールの呼び出しを容易にするため、インポート時にEasyGUIの名前を変更することを忘れないでください。

import easygui as eg
import json
import os

3. ToDoリストを含むJSONファイルの名前を格納するための「filename」という変数を作成します。このファイルはシステム上の任意の場所に保存できますが、この場合はto-do.pyファイルと同じディレクトリ内のファイルです。

filename = "todo_list.json"

4. JSONファイルに保存されたToDoタスクを読み込む関数を作成します。ファイルが存在する場合(os.path.exists)は、関数はその内容を返します。ファイルが存在しない場合は、空のリスト([])を返します。

def load_tasks(): if os.path.exists(filename): with open(filename, "r") as f: return json.load(f) else: return [] 

5. ToDoタスクをJSONファイルに保存する関数を作成します。ファイルを開き、既存の内容をJSON構造にフォーマットされた新しいリストで上書きします。

def save_tasks(tasks): with open(filename, "w") as f: json.dump(tasks, f) 

6. load_tasks 関数を呼び出し、出力(Python 関数が返す値)を「tasks」という変数に格納します。load_tasks関数は、JSON ファイルに保存されている既存の ToDo リストを返すか、空の Python リストを作成します。

tasks = load_tasks() 

7.ユーザーが終了するまでコードを実行する while True ループを作成します。

while True: 

8. EasyGUIを使用して「choice」という変数を作成し、ボタンボックスへのユーザーの応答をそこに保存します。1行目はユーザーに表示されるテキストです。\nはPythonで改行を表す記号です。2行目はダイアログボックスのタイトルです。画像は任意のGIF画像にすることができます。最後に、選択肢はPythonリストに保存され、クリック可能なボタンになります。ボタンは選択された値(変数「choice」に格納)を返します。

 choice = eg.buttonbox( msg="What would you like to do?\nSelect an option below", title="To-Do List", image="clipboard.gif", choices=["View Tasks", "Add Task", "Remove Task", "Exit"] ) 

9.ボタンボックスへのユーザーの反応に基づいて条件テストを作成します。ユーザーが「現在のタスクを表示する」を選択し、JSONファイルにタスクが存在する場合は、EasyGUIテキストボックスを使用してタスクを表示します。そうでない場合は、表示するタスクがないことを、同じくテキストボックスを使用してユーザーに伝えます。

 if choice == "View Tasks": if tasks: eg.textbox("Your Tasks:", "To-Do List", "\n".join(tasks)) else: eg.msgbox("No tasks yet!", "To-Do List") 

10.条件テストの2番目の選択肢を作成します。これは、ユーザーがボタンボックスから「タスクを追加」を選択した場合に実行されます。これにより、EasyGUIの入力ボックスからユーザーが入力した内容を格納する変数taskが作成されます。次に、tasksオブジェクト(リスト)を追加し、save_tasks関数を呼び出してリストをJSONファイルに書き込みます。最後に、タスクが追加されたことを確認するメッセージボックスが表示されます。

 elif choice == "Add Task": task = eg.enterbox("Enter a new task:", "Add Task") if task: tasks.append(task) save_tasks(tasks) eg.msgbox("Task added!", "To-Do List") 

11.ユーザーが「タスクを削除」を選択したときにアクティブになる次の選択肢を作成します。削除するタスクがある場合は、EasyGUIの選択ボックスが表示され、ユーザーに削除するタスクを選択するように促します。次に、ネストされたif条件によってタスクリスト(タスクのPythonリスト)からタスクが削除され、ユーザーにタスクが削除されたことが通知されます。削除するタスクがない場合は、EasyGUIのメッセージボックスが表示され、ユーザーに通知されます。

 elif choice == "Add Task": task = eg.enterbox("Enter a new task:", "Add Task") if task: tasks.append(task) save_tasks(tasks) eg.msgbox("Task added!", "To-Do List") 

12. else条件を使用して、コード内にブレークポイントを作成し、アプリを終了します。これは実質的に終了ボタンとなります。

 else: break

13.コードを保存します。

14.コマンド プロンプト ウィンドウを開き、ToDo アプリの場所に移動します。

15. Pythonを使ってToDoアプリを実行し、アプリの機能をテストします。これで、EasyGUIとPythonを使ったグラフィカルアプリケーションの構築が完了しました。

python to-do.py

独自のアイコンを持ち、実行にコマンド プロンプトを必要としない真の GUI アプリケーションを作成する場合は、このガイドに従って、サンプル コードの代わりにto-do.pyファイルを使用してください。

完全なコードリスト

import easygui as eg
import json
import os filename = "todo_list.json" def load_tasks(): if os.path.exists(filename): with open(filename, "r") as f: return json.load(f) else: return [] def save_tasks(tasks): with open(filename, "w") as f: json.dump(tasks, f) tasks = load_tasks() while True: choice = eg.buttonbox( msg="What would you like to do?\nSelect an option below", title="To-Do List", image="clipboard.gif", choices=["View Tasks", "Add Task", "Remove Task", "Exit"] ) if choice == "View Tasks": if tasks: print(tasks) eg.textbox("Your Tasks:", "To-Do List", "\n".join(tasks)) else: eg.msgbox("No tasks yet!", "To-Do List") elif choice == "Add Task": task = eg.enterbox("Enter a new task:", "Add Task") if task: tasks.append(task) save_tasks(tasks) eg.msgbox("Task added!", "To-Do List") elif choice == "Remove Task": if tasks: task_to_remove = eg.choicebox( "Select a task to remove:", "Remove Task", tasks ) if task_to_remove: tasks.remove(task_to_remove) save_tasks(tasks) eg.msgbox("Task removed!", "To-Do List") else: eg.msgbox("No tasks to remove!", "To-Do List") else: break

レス・パウンダーは、トムズ・ハードウェアのアソシエイトエディターです。クリエイティブテクノロジストとして、7年間にわたり、老若男女を問わず、教育と啓発のためのプロジェクトを手がけてきました。Raspberry Pi Foundationと協力し、教師向けトレーニングプログラム「Picademy」の執筆・提供にも携わっています。