PySimpleGUI入門 – たった5分で理解する使い方と実装例

PythonでGUIアプリケーションを開発したい、でも何から始めたらいいか分からない。そんな初心者の方におすすめなのが、PySimpleGUIです。シンプルで読みやすいコードと豊富なウィジェットを使って、誰でも簡単にGUIアプリが作れます。この記事では、PySimpleGUIの魅力と基本的な使い方、サンプルコードなどを詳しく解説します

この記事を読んだらわかること
  • PySimpleGUIの概要と特徴
  • PySimpleGUIを使うメリット
  • PySimpleGUIの基本的な使い方
  • PySimpleGUIのサンプルコード
  • PySimpleGUIのデメリットと他ライブラリとの比較
  • PySimpleGUIでスキルアップする方法

PySimpleGUIとは?概要と特徴を簡単に紹介

PySimpleGUIは、Pythonでデスクトップアプリケーションを開発するためのGUIライブラリです。tkinter, Qt (PySide2), WxPythonといった既存のGUIフレームワークをラップし、よりシンプルで直感的なインターフェースを提供することを目的に設計されました。

PySimpleGUIの最大の特長は、コンパクトで読みやすいコードでGUIアプリケーションを構築できる点にあります。

コードがシンプルで読みやすい

PySimpleGUIは、直感的な文法体系を採用しているため、Pythonの基礎知識だけでGUIアプリケーションの開発が可能です。ウィジェットの配置はリスト形式で指定するだけで、レイアウトを組み立てられます。また、イベントループの処理も自動化されており、イベントが発生した際の処理をコールバック関数として設定するだけで済みます。

以下は、ボタンクリック時にメッセージボックスを表示する簡単なコード例です。

import PySimpleGUI as sg

layout = [[sg.Text("Hello!")], [sg.Button("Click me")]]
window = sg.Window("My GUI", layout)

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event == "Click me":
        sg.popup("You clicked the button!")

window.close()

豊富なウィジェットを組み合わせるだけ

PySimpleGUIには、ボタン、テキスト入力欄、チェックボックス、ラジオボタンなど、一般的なGUIアプリケーションで使用される様々なウィジェットが用意されています。これらのウィジェットを自由に組み合わせることで、直感的にGUIのレイアウトを構築できます。

以下のコード例では、テキスト入力欄とボタンを配置し、ボタンクリック時に入力内容を表示するGUIを作成しています。

import PySimpleGUI as sg

layout = [
    [sg.Text("Enter your name:"), sg.Input(key="-INPUT-")],
    [sg.Button("Submit"), sg.Button("Clear")],
    [sg.Text("", size=(30, 1), key="-OUTPUT-")],
]
window = sg.Window("Input Example", layout)

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event == "Submit":
        window["-OUTPUT-"].update(f"Hello, {values['-INPUT-']}!")
    elif event == "Clear":
        window["-INPUT-"].update("")
        window["-OUTPUT-"].update("")

window.close()

Tkinter, Qt, WxPythonのラッパーとして利用可能

PySimpleGUIは、tkinter, Qt (PySide2), WxPythonのラッパーとして動作します。これらのフレームワークの知識がなくても、PySimpleGUI経由で基本的な機能を利用できます。また、必要に応じて、各フレームワーク固有の機能にもアクセス可能です。

以下は、PySimpleGUIでQt (PySide2) のウィジェットを使用する例です。

import PySimpleGUI as sg

sg.theme("Dark Blue 3")
layout = [[sg.Text("Hello, PySimpleGUI with Qt!")], [sg.Button("OK")]]
window = sg.Window("Qt Example", layout, enable_close_attempted_event=True)

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSE_ATTEMPTED_EVENT and sg.popup_yes_no("Do you really want to exit?") == "Yes":
        break
    elif event == "OK":
        sg.popup("You clicked OK!")

window.close()

以上のように、PySimpleGUIを使えば、初心者でも簡単にGUIアプリケーションの開発に取り組むことができます。シンプルで読みやすいコードと、豊富なウィジェットを組み合わせることで、本格的なデスクトップアプリケーションの作成が可能です。

PySimpleGUIの基本的な使い方

PySimpleGUIを使ってGUIアプリケーションを開発する際の基本的な流れは、以下の4つのステップに分けられます。

  1. インストール
  2. ウィンドウの作成
  3. ボタンなどのウィジェット追加
  4. イベントループの実装

それでは、各ステップについて詳しく見ていきましょう。

インストール方法

PySimpleGUIのインストールは、pip を使用して簡単に行うことができます。以下のコマンドをターミナルまたはコマンドプロンプトで実行します。

pip install PySimpleGUI

インストール後、Python スクリプト内で以下のようにインポートします。

import PySimpleGUI as sg

初回コード実行時に登録を求められるので指示に従いましょう。また、30日間はお試し期間ということで登録なしで利用できます。以降は個人利用なら無料、商用利用なら$99の支払いが必要となります。

ウィンドウの作成

PySimpleGUIでウィンドウを作成するには、sg.Window クラスを使用します。ウィンドウのタイトルとレイアウトを指定して、ウィンドウオブジェクトを生成します。

layout = [[sg.Text("Hello, PySimpleGUI!")], [sg.Button("OK")]]
window = sg.Window("My Window", layout)

上記の例では、”Hello, PySimpleGUI!” というテキストと “OK” ボタンを持つシンプルなレイアウトを定義しています。

ボタンなどのウィジェット追加

ウィンドウにボタンやテキスト入力欄などのウィジェットを追加するには、レイアウトリストにそれらのウィジェットを含めます。PySimpleGUIには、様々な種類のウィジェットが用意されています。

layout = [
    [sg.Text("Enter your name:"), sg.Input(key="-INPUT-")],
    [sg.Button("Submit"), sg.Button("Clear")],
    [sg.Text("", size=(30, 1), key="-OUTPUT-")],
]
window = sg.Window("Input Example", layout)

この例では、テキスト入力欄(sg.Input)とボタン(sg.Button)を追加しています。また、それぞれのウィジェットにはキー(key)を指定しています。

イベントループの実装

ウィンドウを表示し、ユーザーのアクションに応答するには、イベントループを実装する必要があります。以下は、基本的なイベントループの例です。

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event == "Submit":
        window["-OUTPUT-"].update(f"Hello, {values['-INPUT-']}!")
    elif event == "Clear":
        window["-INPUT-"].update("")
        window["-OUTPUT-"].update("")

window.close()

window.read() でユーザーのアクションを待ち受け、イベントとともに入力値(values)を取得します。取得したイベントに応じて、適切な処理を行います。ループを抜ける際には、window.close() でウィンドウを閉じます。

以上が、PySimpleGUIの基本的な使い方の流れです。これらのステップを理解することで、初心者の方でも簡単にGUIアプリケーションの開発に取り組むことができるでしょう。

PySimpleGUIのサンプルコード

PySimpleGUIを使ったサンプルコードを見ることで、ライブラリの活用方法や応用範囲を理解することができます。ここでは、初心者にとって有用な3つのサンプルコードを紹介します。

マルチウィンドウのデモアプリ

以下のサンプルコードは、複数のウィンドウを切り替えて表示するデモアプリケーションです。

import PySimpleGUI as sg

def main_window():
    layout = [
        [sg.Text("メインウィンドウ")],
        [sg.Button("設定ウィンドウを開く", key="-SETTINGS-")],
        [sg.Button("終了", key="-EXIT-")]
    ]
    return sg.Window("メインウィンドウ", layout, finalize=True)

def settings_window():
    layout = [
        [sg.Text("設定ウィンドウ")],
        [sg.Input(key="-INPUT-")],
        [sg.Button("保存して閉じる", key="-SAVE-")]
    ]
    return sg.Window("設定ウィンドウ", layout, finalize=True)

def main():
    window1, window2 = main_window(), None

    while True:
        window, event, values = sg.read_all_windows()

        if event == sg.WINDOW_CLOSED or event == "-EXIT-":
            break
        elif event == "-SETTINGS-":
            window2 = settings_window()
        elif event == "-SAVE-" and window == window2:
            print("設定:", values["-INPUT-"])
            window2.close()

    window1.close()

if __name__ == "__main__":
    main()

このサンプルコードでは、メインウィンドウと設定ウィンドウの2つのウィンドウを定義しています。sg.read_all_windows() を使用して、全てのウィンドウのイベントを監視し、適切な処理を行います。

ファイル選択ダイアログの実装

以下のサンプルコードは、ファイル選択ダイアログを表示し、選択されたファイルのパスを取得します。

import PySimpleGUI as sg

def main():
    layout = [
        [sg.Text("ファイルを選択してください")],
        [sg.Input(key="-FILE-"), sg.FileBrowse("選択")],
        [sg.Button("開く", key="-OPEN-"), sg.Button("閉じる", key="-CLOSE-")]
    ]
    window = sg.Window("ファイル選択", layout)

    while True:
        event, values = window.read()

        if event == sg.WINDOW_CLOSED or event == "-CLOSE-":
            break
        elif event == "-OPEN-":
            file_path = values["-FILE-"]
            if file_path:
                print("選択されたファイル:", file_path)
            else:
                sg.popup("ファイルが選択されていません")

    window.close()

if __name__ == "__main__":
    main()
        

] window = sg.Window(“ファイル選択”, layout) while True: event, values = window.read() if event == sg.WINDOW_CLOSED or event == “-CLOSE-“: break elif event == “-OPEN-“: file_path = values[“-FILE-“] if file_path: print(“選択されたファイル:”, file_path) else: sg.popup(“ファイルが選択されていません”) window.close() if __name__ == “__main__”: main()

sg.FileBrowse を使用することで、簡単にファイル選択ダイアログを表示できます。選択されたファイルのパスは、sg.Input と関連付けられたキーから取得します。

MatplotlibグラフのGUI埋め込み

以下のサンプルコードは、MatplotlibとPySimpleGUIを連携させ、グラフをGUIウィンドウ内に表示します。

import PySimpleGUI as sg
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

def draw_figure(canvas, figure):
    figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
    figure_canvas_agg.draw()
    figure_canvas_agg.get_tk_widget().pack(side="top", fill="both", expand=1)
    return figure_canvas_agg

def main():
    sg.theme("LightGreen")
    layout = [
        [sg.Canvas(key="-CANVAS-")],
        [sg.Button("描画"), sg.Button("閉じる")]
    ]
    window = sg.Window("Matplotlibグラフ表示", layout, finalize=True, element_justification="center", font="Helvetica 18")

    fig = plt.figure(figsize=(5, 4))
    fig_agg = None

    while True:
        event, values = window.read()
        if event in (sg.WINDOW_CLOSED, "閉じる"):
            break
        elif event == "描画":
            plt.clf() # 前回のグラフをクリア
            fig_agg = draw_figure(window["-CANVAS-"].TKCanvas, fig)
            ax = fig.add_subplot(111)
            ax.plot([0, 1, 2], [3, 2, 5])
            fig_agg.draw()

    window.close()

if __name__ == "__main__":
    main()
        

このサンプルコードでは、sg.Canvas を使用してMatplotlibのグラフを描画するためのスペースを確保しています。描画ボタンを押すと、グラフが描画され、GUIウィンドウ内に表示されます。

以上の3つのサンプルコードを通して、PySimpleGUIの活用方法や応用範囲を具体的に理解することができます。これらのサンプルコードをベースに、オリジナルのGUIアプリケーションを開発してみると良いでしょう。

PySimpleGUIのデメリットと他ライブラリとの比較

PySimpleGUIは、GUIアプリケーション開発を簡単に始められる優れたライブラリですが、いくつかのデメリットや制限事項があります。ここでは、PySimpleGUIの短所と他のGUIフレームワークとの比較を見ていきましょう。

レイアウトのカスタマイズ性はtkinterなどに劣る

PySimpleGUIは、レイアウトをリスト形式で定義するため、ウィジェットの細かな位置調整が難しい面があります。tkinterのようにグリッドやパッキングを使った詳細なレイアウト調整ができないため、デザインの自由度が低く、複雑なレイアウトを実現するのが困難です。

例えば、tkinterでは以下のようにグリッドを使ってウィジェットを配置できます。

import tkinter as tk

root = tk.Tk()
root.title("Tkinterレイアウト")

label = tk.Label(root, text="こんにちは、Tkinter!")
label.grid(row=0, column=0, padx=10, pady=10)

button = tk.Button(root, text="クリック")
button.grid(row=1, column=0, padx=10, pady=10)

root.mainloop()

一方、PySimpleGUIではレイアウトをリスト形式で定義するため、同等の配置を行うには工夫が必要です。

PyQt, wxPythonと比べると機能面で物足りない

PyQtやwxPythonは高機能で、様々なウィジェットやオプションを提供しています。一方、PySimpleGUIは基本的なウィジェットに限定されており、高度な機能を実装するのが難しい面があります。アニメーションやグラフィックス処理などの高度な要件には向きません。

例えば、PyQtでは以下のようにQTableWidgetを使って表形式のデータを表示できます。

import sys
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem

app = QApplication(sys.argv)
table = QTableWidget()
table.setRowCount(3)
table.setColumnCount(3)

for i in range(3):
    for j in range(3):
        item = QTableWidgetItem(f"セル({i}, {j})")
        table.setItem(i, j, item)

table.show()
sys.exit(app.exec_())

PySimpleGUIでは、同等の機能を実現するのは簡単ではありません。

それでもシンプルにGUIを作るにはおすすめ

上記のようなデメリットはあるものの、簡単なGUIアプリケーションを素早く作成するには、PySimpleGUIが最適です。初心者にとって、学習コストが低く、コードの記述量も少なくて済むため、プロトタイプ作成や小規模なユーティリティの開発に適しています。

以下は、PySimpleGUIを使った簡単な入力フォームの例です。

import PySimpleGUI as sg

layout = [
    [sg.Text("名前を入力してください")],
    [sg.Input(key="-NAME-")],
    [sg.Button("送信")]
]

window = sg.Window("入力フォーム", layout)

while True:
    event, values = window.read()
    if event == sg.WINDOW_CLOSED:
        break
    elif event == "送信":
        name = values["-NAME-"]
        sg.popup(f"こんにちは、{name}さん!")

window.close()
    

このように、PySimpleGUIを使えば、少ないコード量で入力フォームを作成できます。

PySimpleGUIには一長一短があるため、開発するアプリケーションの要件に応じて、適切なGUIフレームワークを選択することが重要です。シンプルで習得が容易な点は、PySimpleGUIの大きな魅力と言えるでしょう。

PySimpleGUIでデスクトップアプリ開発のスキルアップ

PySimpleGUIを使ってデスクトップアプリ開発のスキルを向上させるには、以下の3つのポイントが重要です。

公式ドキュメントやリファレンスを活用しよう

PySimpleGUIの公式ドキュメントは、初心者がPySimpleGUIの全体像を理解するために非常に役立ちます。APIリファレンスでは、各ウィジェットの使い方や設定可能なオプションが詳しく説明されています。また、サンプルコードも豊富に提供されており、実際のコードを見ながら学ぶことができます。

リンク:https://docs.pysimplegui.com/en/latest/

初心者の方は、まず公式ドキュメントを一通り読んでみることをおすすめします。特に、「Getting Started」や「Writing PySimpleGUI Applications」などの章は、PySimpleGUIの基本的な使い方を理解するために重要です。目次を活用して、必要な情報を効率的に探すことができます。

サンプルコードを読んで学ぶ

PySimpleGUIの公式サイトには、数多くのサンプルコードが用意されています。これらのサンプルコードを読んで、実際に動かしてみることで、PySimpleGUIの様々な機能や使い方を学ぶことができます。

サンプルコードは、簡単なものから複雑なものまで幅広く用意されています。初心者の方は、まずシンプルなサンプルから始めることをおすすめします。例えば、ウィンドウの作成やボタンの配置など、基本的な要素を含むサンプルを選んで、コードを読み込んでいきましょう。

サンプルコードを読む際は、コードの流れを追いながら、各部分の役割を理解することが大切です。また、コードを一部変更して、動作の違いを確認してみるのも効果的です。これにより、PySimpleGUIの仕組みをより深く理解することができます。

自分でオリジナルのGUIアプリを作ってみる

PySimpleGUIのスキルを本当に身につけるためには、自分でオリジナルのGUIアプリを作ってみることが不可欠です。サンプルコードを読んで学んだ知識を活かし、自分の手で実際にアプリを作る経験が、スキルアップに直結します。

オリジナルアプリを作る際は、まず実現したい機能や画面イメージを明確にすることから始めましょう。そして、それを実現するために必要なウィジェットや機能を洗い出します。その上で、公式ドキュメントやサンプルコードを参考にしながら、実際にコードを書いていきます。

アプリ作成の過程では、様々な問題やエラーに遭遇するかもしれません。その際は、エラーメッセージをよく読んで、問題の原因を特定することが重要です。公式ドキュメントやオンラインフォーラムで解決策を探したり、サンプルコードを参考にしたりしながら、問題を1つずつ解決していきましょう。

自分でオリジナルのGUIアプリを作ることで、PySimpleGUIの理解がさらに深まります。また、アプリ開発の一連の流れを体験することで、実践的なスキルが身につきます。

以上の3つのポイントを意識して、PySimpleGUIを学んでいくことで、デスクトップアプリ開発のスキルを着実に向上させることができるでしょう。公式ドキュメントを活用し、サンプルコードから学び、自分でオリジナルのアプリを作る経験を積むことが、PySimpleGUIをマスターするための近道です。

まとめ:PySimpleGUIは初心者こそ使うべきGUIフレームワーク

PySimpleGUIは、初心者がGUIアプリケーション開発を始めるのに最適なフレームワークです。シンプルで読みやすいコードと、豊富なウィジェットを組み合わせるだけでGUIが作れる点が大きな魅力です。他のGUIフレームワークと比べても、学習コストが低いため、初心者でもスムーズにスキルアップできます。

PySimpleGUIを学ぶことで、初心者はGUIアプリ開発の基礎知識を身につけることができます。イベントドリブンプログラミングの考え方や、ユーザーインターフェースの設計・実装など、プログラミングの重要な概念を実践的に学べます。これらのスキルは、他のGUIフレームワークを学ぶ際の基礎となり、プログラミングの可能性を大きく広げてくれます。

また、PySimpleGUIを使って実際に動くアプリを作ることで、プログラミングの理解が深まります。自分で作ったアプリを実際に使ってもらうことで、プログラミングの楽しさを実感できるでしょう。オリジナルのアプリを作成する経験は、アイデアを形にする力を養い、プログラマーとしての成長につながります。

PySimpleGUIは、初心者がGUIアプリ開発のスキルを身につけるための最短の道のりを提供してくれます。シンプルで分かりやすいコードと、豊富なウィジェットやサンプルコードによって、初心者でもすぐにGUIアプリ開発に取り組むことができます。学習コストが低く、短期間でスキルアップできる点は、初心者にとって大きなメリットと言えるでしょう。

本記事で紹介してきたように、PySimpleGUIは初心者にとって最適なGUIフレームワークです。シンプルで読みやすいコード、豊富なウィジェット、低い学習コストなど、初心者がGUIアプリ開発を始めるのに必要な要素を全て兼ね備えています。PySimpleGUIを通じてGUIアプリ開発のスキルを身につけることで、プログラミングの可能性が大きく広がるでしょう。

初心者の方は、ぜひPySimpleGUIに挑戦してみてください。きっと、GUIアプリ開発の面白さとプログラミングの楽しさを実感できるはずです。PySimpleGUIを使いこなせるようになれば、オリジナルのアプリケーション開発にも挑戦できます。プログラマーとしてのスキルアップに、PySimpleGUIは最適なツールと言えるでしょう。