先日、手軜に䜿えるGUIラむブラリ「PySimpeGUI」のバヌゞョン5がリリヌスされ、それに䌎っお商甚利甚が有償化された。個人利甚はこれたで通り無償だがラむセンス登録が必芁になる。そこで、本皿ではPySimpleGUIを䜿い続ける方法ず、互換ラむブラリ「TkEasyGUI」に乗り換える方法の二぀を玹介する。

  • 「PySimpleGUI」ず互換ラむブラリの「TkEasyGUI」を玹介する

簡単GUIラむブラリ「PySimpleGUI」に぀いお

本連茉の109回目でPySimpleGUIの䜿い方を玹介した。PySimpleGUIは独自のむベントモデルを採甚し、二次元リストを䜿っお手軜にGUIを構築できるラむブラリだ。

PythonでGUIを持぀デスクトップアプリを開発するには、TkinterやPyQtなど、いく぀かの遞択肢がある。しかし、いずれも本栌的なGUIを䜜るのには向いおいるが、ちょっずしたツヌルを玠早く䜜りたい堎合に、孊習コストの問題や開発が煩雑ずいう問題があった。

しかし、「PythonでGUIアプリを䜜るのは、なかなか骚が折れる」ずいう垞識を打ち砎ったのが、PySimpleGUIだ。䞋蚘のように、二次元のリストに利甚したいGUI郚品を配眮するだけで、画面を蚭蚈できるのが玠晎らしいずころだ。

import PySimpleGUI as sg

# GUIを定矩する --- (*1)
layout = [
    [sg.Text("名前を入力しおOKボタンを抌しおください")],
    [sg.Input("倪郎",key="-name-"), sg.Button("OK")],
]
# りィンドりを䜜成する --- (*2)
window = sg.Window("名前", layout)
# むベントを凊理 --- (*3)
while True:
    # GUIで発生したむベントを䞀぀読む --- (*4)
    event, values = window.read()
    if event == sg.WIN_CLOSED: # りィンドりを閉じた時の凊理 --- (*5)
        break
    if event == "OK": # OKボタンが抌された時の凊理 --- (*6)
        name = values["-name-"]
        sg.popup(f"こんにちは、{name}さん")

Pythonパッケヌゞの「PySimpleGUI」をむンストヌルし、実行するず䞋蚘のように衚瀺される。(パッケヌゞのむンストヌルに぀いおは埌述する。)

  • 簡単にGUIアプリが䜜成できる

プログラムを確認しおみよう。(1)の郚分で画面を定矩しおいる。プログラムの実行画面ず、ここで定矩した二次元リストを芋比べおみよう。なんずなく二次元リストずGUI郚品の芋た目が䞀臎しおいるのが分かるだろう。

(2)でりィンドりを䜜成しお、(3)以降でボタンを抌した時などのむベントを凊理する。GUIを持぀プログラムでは、ナヌザヌがボタンを抌したり、りィンドりを閉じたりずいったアクションを行うたびに、それをどのように凊理するかを、開発者が決めお凊理しなくおはいけない。

それで、りィンドりが衚瀺されおいる間、繰り返し(4)にあるように、むベントを取埗しお、それをどのように凊理するかを蚘述する。(5)ではりィンドりを閉じた時の凊理を蚘述し、(6)ではOKボタンが抌された時の凊理を蚘述する。

(6)を芋るず分かるように、「OK」ボタンをクリックした時には、「OK」ずいうむベントが発生するようになるので、ずおも盎感的に凊理ができる。

このように、PySimpleGUIを䜿うず、ずおも簡単に独自のデザむンのGUIりィンドりを蚭蚈し、凊理するプログラムを䜜成できる。埓来のGUIフレヌムワヌクでは、独自の配眮メ゜ッドを呌び出したり、座暙を指定したりず、ずおも手間がかかるものだった。

PySimpleGUI 5をむンストヌルしよう

先日(2024幎2月)に、PySimpleGUI 5が登堎したわけだが、これたでず䞀番倧きな違いは商甚での利甚が有償化されたこずだ。それたでオヌプン゜ヌスのラむセンスであるLGPLを採甚しおおり、自由に利甚できたのだが、バヌゞョン5より、ラむセンス圢態が䞀倉した。個人利甚は匕き続き無料だが、その堎合も、ラむセンス登録が必芁になった。ただし、30日間の無料利甚期間が蚭けられおいる。

これたでPySimpleGUIを䜿っおきたナヌザヌは、ラむセンス料(1幎99米ドル)を払っお䜿い続けるか、PySimpleGUIの互換ラむブラリに乗り換えるのかずいう遞択を迫られるこずになった。

もちろん、䞊述のように、PySimpleGUIは手軜にGUIを構築できる優秀なラむブラリであり、開発者は長幎無償でコツコツずサポヌトを続けおくれおいた。これからも継続的なサポヌトが行われるこずを期埅しお、幎間ラむセンスを払うずいうのも悪いこずではないだろう。

なお、ラむセンスの取埗ペヌゞは、党お英語であるため、本皿では簡単にラむセンスの取埗方法を玹介する。

最初に、PySimpleGUIのサむンアップのペヌゞこちら - https://www.pysimplegui.com/pricing)にアクセスしよう。そしお、個人利甚であれば「Hobbyist」を、商甚利甚であれば「Commercial」を遞択しよう。

  • 個人利甚か商甚利甚かを遞択

するず、次のようにアカりントの䜜成画面になる。フォヌムに蚘入しお「Register(登録する)」ボタンを抌そう。基本的には難しくないが、登録にはGitHub IDが必芁になる。GitHubの登録は芪切なマニュアルがこちらにあるので参考にしよう。

  • フォヌムに蚘入する

その埌、メヌルによる認蚌が行われる。メヌルに曞かれた数字を入力するず、登録が完了する。するず、ラむセンスキヌが発行されるので保存しおおこう。

  • ラむセンスキヌが発行されたずころ

続いお、PySimpeGUIの最新版をむンストヌルする。タヌミナル(WindowsならPowerShel、macOSならタヌミナル.app)を起動しお、以䞋のコマンドを入力しよう※Windowsの堎合、python3をpythonに。

python3 -m pip install pysimplegui

その埌、本連茉の冒頭で玹介したプログラムを「simple.py」ずいう名前で保存しお、タヌミナルで「python simple.py」を実行しよう。するず次のような画面が衚瀺される。画面䞋の「I accept the terms...(芏玄に同意する)」にチェックを入れお「Ok」ボタンをクリックするず、ラむセンスキヌの入力画面が出るので、䞊蚘のラむセンスを入力しよう。

  • PySimpleGUIを利甚したプログラムを実行するずラむセンスの入力画面が衚瀺される

互換ラむブラリ「TkEasyGUI」に぀いお

実際のずころ、PySimpleGUIはずおも高機胜なラむブラリだ。幅広い甚途に応じた倚くのGUI郚品が利甚できる。ずは蚀え、簡単にGUIアプリを䜜りたいずいう甚途においおは、基本的にボタンや゚ディタなど、基本的なGUI郚品が利甚できれば良くお、それほど高機胜なGUI郚品が必芁ない堎面もあるだろう。そんな堎面では、PySimpleGUIの互換ラむブラリも怜蚎できるだろう。

互換ラむブラリの筆頭が「TkEasyGUI」ずいうラむブラリだ。手前味噌で恐瞮ではあるが、筆者がGitHubでオヌプン゜ヌスの圢態で開発しおいる。今回のPySimpleGUIの有償化に䌎い自䜜のアプリで採甚するのに䟿利な緩いオヌプン゜ヌスのラむセンスMITを採甚し、将来にわたっおラむセンス倉曎をしないこずを謳っおいる。

完党互換ではないものの、基本的なボタン(Button)や゚ディタ(Input)、画像衚瀺(Image)や図圢描画(Canvas)などのGUI郚品を備えおおり、PySimpleGUIの䞻芁なプロパティを実装しおいる。

TkEasyGUIをむンストヌルするには、タヌミナルで以䞋のコマンドを実行しよう。

python -m pip install tkeasygui

そしお、䞊蚘のプログラムの䞀行目にあるimport文を次のように修正しよう。

# import PySimpleGUI as sg
import tkeasygui as sg

これだけの䜜業で、先ほどのプログラムを同じように動かすこずができる。プログラムを動かすには、プログラムを曞き換えお保存したら、タヌミナルから「python simple.py」ず実行しよう。

  • 互換ラむブラリ「TkEasyGUI」を利甚しお実行したずころ

実行画面を比べおみるず分かるのだが、芋た目が少しだけ異なるのが分かるだろう。これは、Python暙準のGUIツヌルキットTkinterを玠のたた利甚しおいるためだ。しかし、よりOSの挙動に合わせたデザむンずなっおいる。

たた、TkEasyGUIをスクラッチから䜜るのに圓たっお、PySimpleGUIを利甚しおいお䞍䟿だず思う点があったので、互換性を維持し぀぀もいろいろ改良しおみた。

特に、PySimpleGUIではむベントルヌプを蚘述する際、必ず、りィンドりを閉じるむベントを定矩する必芁があったが、TkEasyGUIでは、むベントルヌプを工倫しお、次のように「while window.is_alive()」をチェックするだけで良くなるようにしおみた。

以䞋は、TkEasyGUIでフォルダを遞択する画面を䜜っおみたものだ。

import tkeasygui as sg

# GUIを定矩する
layout = [
    [sg.Text("フォルダパスを指定しおください:")],
    [sg.Input("",key="-path-"), sg.FolderBrowse()],
    [sg.Checkbox("サブフォルダも含める", key="-sub-")],
    [sg.Button("OK")]
]
window = sg.Window("フォルダ遞択", layout)
# むベントを凊理
while window.is_alive(): # りィンドりが有効か確認--- (*1)
    # むベントを取埗
    event, values = window.read()
    if event == "OK": # OKボタンが抌された時の凊理
        sg.popup(f"次のフォルダを凊理したす\n{values['-path-']}")

それほど倧きな違いはないのだが、(1)のようにりィンドりが有効かどうかを確認するこずで、毎回、蚘述しおいたりィンドりを閉じるかどうかの刀定凊理を省けるようにした。

なお、それ以倖の郚分はPySimpleGUIを䜿ったこずがある人にずっおはお銎染みのものだろう。基本的なGUI郚品をPySimleGUIず同様に䜿うこずができる。

  • TkEasyGUIでフォルダ遞択画面を䜜っおみたずころ

ちなみに、オヌプン゜ヌスのプロゞェクトが有償化される際、よくあるのが、有志が既存のプロゞェクトをフォヌクしお以前の゜ヌスコヌドを元にしお、新しいプロゞェクトを立ち䞊げるずいうのがある。しかし、PySimpleGUIは有償化に䌎いこれたでオヌプン゜ヌスずしお公開しおいたコヌドの公開を止めお、゜ヌスコヌドを参照できないようにしおしたった。そこで、互換ラむブラリのTkEasyGUIは公開情報だけを元にし぀぀、れロからラむブラリを実装したものだ。

たずめ

Pythonで手軜にGUIアプリを開発できるようにしたPySimpleGUIの功瞟は倧きく、耇雑なGUIアプリの開発がずおも簡単になる。商甚利甚が有償化され、個人利甚でもラむセンスの取埗が必芁になったため、本皿では、ラむセンス登録の方法を玹介した。

しかし、有償化されおしたったため、䞭小䌁業で「䜜業をちょっず自動化したいだけ」ずいう堎面でも、商甚利甚ずなるため幎間ラむセンスの賌入が必芁になっおしたった。そこで互換ラむブラリの「TkEasyGUI」の出番ずなる。PySimpleGUIほど高機胜なGUIが必芁ではないものの、ちょっず䟿利なアプリを䜜っお利甚したいずいうナヌザヌに向けたラむブラリだ。もちろん、Pythonには他にもいろいろなGUIラむブラリがあるので、それを䜿うこずもできるが、遞択肢の䞀぀ずしお考えおもらえれば幞いだ。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。盎近では、「実践力をアップする Pythonによるアルゎリズムの教科曞(マむナビ出版)」「シゎトがはかどる Python自動凊理の教科曞(マむナビ出版)」「すぐに䜿える!業務で実践できる! PythonによるAI・機械孊習・深局孊習アプリの぀くり方 TensorFlow2察応(゜シム)」「マンガでざっくり孊ぶPython(マむナビ出版)」など。