【PySimpleGUI 1】デスクトップアプリを作ろう

Pythonを使って自分の作成したプログラムを他の人にも使ってもらいたいと思ったことは無いでしょうか。

Ipynbファイルや純粋なPythonファイルでは、相手の環境にPythonがインストールされている必要があったり、コンソールでの操作が必要であったりと、なかなかハードルが高いです。

ですがデスクトップアプリ化してしまえば、普段使いするアプリケーションと同じように画面ポチポチで操作させることが可能です。

そこでPython使いの皆さんに使っていただきたいのが「PySimpleGUI」です。

PySimpleGUIとは

PySimpleGUI は、Python言語でGUIを作成するためのライブラリです。

Pythonで有名なGUIアプリと言えば、TkinterやPyQtなどですが、カスタマイズ性が高い反面、コードが長くなりやすく、難易度が高いです。(実際私は挫折しました…)

PySimpleGUIはTkinterのラッパー(中でTkinterが動いている)ので、使える機能はTkinter未満の代わりに、コード数をかなり抑えることができます。

当ブログでは、PySimpleGUIを使って様々なGUIアプリを作成していきたいと思います。

PySimpleGUI 公式ドキュメント

使いこなすことで、以下のようなGUIアプリケーションを作成することが出来ます。

PySimpleGUI クックブック

PySimpleGUIのインストール

まずはPySimpleGUIのインストールを行います。

pip でインストールしてください。

pip install PySimpleGUI

最も基本的なウィンドウを作成

PySimpleGUIを使った最もシンプルなコードは以下です。(最もシンプルと言いつつテキスト表示をしていますが)

基本的には、layout 内に、リスト形式で、テキストボックスなど各種オブジェクトを配置していくイメージです。

ウィンドウの定義は、sg.window で定義し、これが1つのアプリになります。

ウィンドウを定義した後は、実際に表示する必要がありますが、そちらが、while True (break が走るまで)の間はずっとアプリケーションが実行中になります。

正直最後の10行はおまじないで必須の部分です。

import PySimpleGUI as sg

# layout を定義
layout = [
    [sg.Text("テキストを表示")]
]

# ウィンドウレイアウトを定義
window = sg.Window("PySimpleGUIのウィンドウタイトル",layout)

# ウインドウを表示
while True:
    event, value = window.read()
    # ×印を押すとWindowを消すことが出来る
    if event == None:
        break
window.close()

フォントやサイズ調整

各オブジェクト毎にフォントや文字サイズ、オブジェクトのサイズを指定することが可能です。

大事なボタンは大きく表示したりすることができますね。

あとは、ウィンドウのサイズを指定することが出来ます。

PySimpleGUIでは、ウィンドウサイズは可変(オブジェクトをすべて表示できるように自動調整)されますが、Window関数でsize を指定することでFixにすることができます。

import PySimpleGUI as sg
# layout を定義
layout = [
    [sg.Text("テキスト1を表示" ,size = (5,3)),sg.Text("テキスト2を表示"),sg.Text("テキスト3を表示")],
    [sg.InputText()],
    [sg.Multiline()]
]

# ウィンドウレイアウトを定義
window = sg.Window("ウインドウのサイズを固定",layout, size=(400, 700))

# ウインドウを表示
while True:
    event, value = window.read()
    # ×印を押すとWindowを消すことが出来る
    if event == None:
        break
window.close()

テーマの変更

PySimpeGUIの基本的な内容がわかったら、アプリをちょっとおしゃれにしてみたいと思うかもしれません。

PySimpleGUIではデフォルトで多数のテーマが入っており、sg.theme(“テーマ名”)で簡単にテーマを設定できます。

以下のコードを実行すれば、テーマを選択するアプリが立ち上がり、色々見て確認することが可能です。

※私は「TealMono」がお気に入り

import PySimpleGUI as sg

sg.theme('Dark Brown')

layout = [[sg.Text('Theme Browser')],
          [sg.Text('Click a Theme color to see demo window')],
          [sg.Listbox(values=sg.theme_list(), size=(20, 12), key='-LIST-', enable_events=True)],
          [sg.Button('Exit')]]

window = sg.Window('Theme Browser', layout)

while True:  # Event Loop
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Exit'):
        break
    sg.theme(values['-LIST-'][0])
    sg.popup_get_text('This is {}'.format(values['-LIST-'][0]))

window.close()

# https://www.pysimplegui.org/en/latest/cookbook/

まとめ

PySimpleGUIの基本の最も基本的な部分を紹介しました。

この記事で扱った、コードをベースに後はlayoutオブジェクトにオブジェクトを追加したり、機能を持たせていくことで様々なアプリケーションを作成することができます。