【Python】GUIアプリを作ってみる【PySimpleGUI編】※初心者向け


管理人
pythonのGUIライブラリ、
PySimpleGUIを試してみました!

PySimpleGUIはプログラムを少ない行数で書けるGUIとして、Pythonで人気のGUIの1つとなっています。

 

PySimpleGUIを使って、簡単なGUIアプリを作ってみました。

 

今回は、初心者に向けて、基礎の基礎をメインにするため、

  • PySimpleGUIの雰囲気
  • 基礎的なPySimpleGUIの実装方法

をつかんでいただけたらと思います。

 


PySimpleGUIの特徴

見やすくシンプルなプログラム

PySimpleGUIでは、プログラムの1行1行が、GUIの1行1行に対応して書けるため、見やすいプログラムとなっています。

公式ドキュメントから抜粋>
実際に見たほうが早いと思うので、下記、サンプルプログラムの画面レイアウト部分と実行結果です。

layout = [  [sg.Text('Some text on Row 1')],
            [sg.Text('Enter something on Row 2'), sg.InputText()],
            [sg.OK(), sg.Cancel()]]

 

管理人
プログラムから画面レイアウトが簡単に想像できますね!

 

実装がしやすい

プログラムの見やすさだけでなく、次の点でも、PySimpleGUIは実装のしやすいライブラリであると思います。

 

しっかりしてる公式ドキュメント

PySimpleGUIには「クックブック」と呼ばれる使い方が書かれている公式ドキュメントがあります。

英語ですが、ここまで細かく丁寧に書かれているドキュメントは少ないと思います。

プログラムを書く際の基本的な疑問については、クックブックを見れば解決できると思います。

 

デモプログラムが豊富

ドキュメントだけではなく、デモプログラムも豊富にあります。

既存のプログラムをGUI化したいとき、他のライブラリとの連携が必要になるかと思います。

PySimpleGUIには、MatplotlibやOpenCVなどとの連携のサンプルプログラムもあります

 

 

ライセンス

PySimpleGUIのライセンスは、GNU Lesser General Public License v3.0(LGPL 3.0)です。(参考

 

 

 

【Python】GUIアプリを作ってみる【PySimpleGUI編】

 

開発環境

  • OS Windows 10
  • Pythonバージョン 3.7.1
  • エディタ VS Code
  • ライブラリ PySimpleGUI  4.24.0、Pillow 5.4.1(サンプルプログラム2で使用します)

 

準備 PySimpleGUIのインストール

pip install PySimpleGUI
⇒「Successfully installed~」がでればOK

サンプルプログラム1 Hello World

まずは、PySimpleGUIを使って、「Hello World」を表示させましょう。

ソースコード

import PySimpleGUI as sg

# ウィンドウのレイアウト
layout = [  [sg.Text('Hello')],
            [sg.Text('World')]  ]

# ウィンドウオブジェクトの作成
window = sg.Window('PySimpleGUI Sample', layout, size=(300, 150))

# イベントのループ
while True:
    # イベントの読み込み
    event, values = window.read()
    # ウィンドウの×ボタンが押されれば終了
    if event == sg.WIN_CLOSED:
        break

# ウィンドウ終了処理
window.close()

全体の流れとしては、下記の通りとなります。

  1. ウィンドウのレイアウトを2次元配列で設定 4~5行目
  2. ウィンドウオブジェクトの生成 8行目
  3. イベントループ 11~16行目
  4. 終了処理 19行目

 

実行結果

無事に「Hello World」が表示されました!

 

管理人
次は少しだけ実用的なプログラムです。

 

サンプルプログラム2 簡単な画像変換・表示アプリ

ソースコード

import PySimpleGUI as sg
from PIL import Image, ImageTk

# ファイルブラウザを使用したファイル入力
file_input_col = [sg.Text('ファイル'),
                  sg.InputText(key='INPUT_FILE', enable_events=True, size=(45,1)),
                  sg.FileBrowse('参照', file_types=(('jpegファイル', '*.jpg'), ('png', '*.png')))]

# 画像のモード指定
image_mode_col = [sg.Text('画像モード'),
                  sg.Listbox(values=('Normal', 'LA', 'HSV', 'P'), size=(30, 3), key='IMAGE_MODE', enable_events=True)]

# 画像を表示するElement
image_element = [sg.Image(filename='')]

# ウィンドウのレイアウト
layout = [  file_input_col,
            image_mode_col,
            image_element  ]

# 画像データの読み込みとサイズ変更
# デフォルトではGIF、PGM/PPM画像しか対応していないため、
# PILを使用して読み込む
def get_image_data(input_filename, image_mode):
    image = Image.open(input_filename)
    if len(image_mode) != 0:
        if image_mode[0] != 'Normal':
            image_convert = image.convert(image_mode[0])
            image = image_convert
    image.thumbnail((400,400))
    return ImageTk.PhotoImage(image)

# ウィンドウオブジェクトの作成
window = sg.Window('Show Picture', layout)

# イベントのループ
while True:
    event, values = window.read()
    print(values['INPUT_FILE'])
    print(values['IMAGE_MODE'])
    if event == sg.WIN_CLOSED:
        break
    if values['INPUT_FILE'] != '':
        image_element[0].update(data=get_image_data(values['INPUT_FILE'], values['IMAGE_MODE']))
        
# ウィンドウクローズ処理
window.close()

デフォルトの画像読み込みでは、GIFとPGM/PPM画像しか対応していないようです。

画像を読み込み表示するライブラリとして、Pillowを使用しました。

 

補足として、PySimpleGUIでは、ボタンなどをウィジェットではなく、Elementと呼ぶみたいです。
(Tkinterなど他のライブラリのウィジェットと区別するため)

 

下記の記事を参考にさせた頂きました

PySimpleGUIで画像処理ビューアーを作る

PIL/Pillow チートシート

実行結果

1.初期画面

 

2.「参照」ボタンで画像ファイルを選択して画像表示

 

3.画像モードで「LA(グレースケール)」を選択

 

管理人
画像を表示するGUIを作れました!
今回はここまで。

 

まとめ

PySimpleGUIを使って、簡単なGUIを作ることができました。

 

画面レイアウトがソースコードに強く紐づいているため、画面レイアウトは間違えにくいと感じました。

 

公式のドキュメントを見ると、画面のテーマ変更なども簡単にできるようなので、試してみたいと思いました。

 

PythonのGUIのライブラリ選びには、下記もご参考いただければと思います。

【Python】GUIライブラリ13個を比較【初心者へのオススメあり】
 Pythonのライブラリの特徴やライセンスなどがまとめてあります。

 

管理人
最後までご覧いただきありがとうございました!