2024年08月17日

TkEasyGUIへの移行

Pythonで簡易的なアプリを作成する際に便利なライブラリとしてPySimpleGUIがあります。ただ、商用ユースでは先日から有償化され、個人ユースであってもライセンス登録が必要です。ライブラリ自体の使い勝手という点で難があるため、PySimpleGUIと互換性があるTkEasyGUIに移行してみました。ただし、互換性があるといっても完全互換ではないため、今までのコードそのままでは動かない場合が多々あります。

今回は自作アプリをTkEasyGUIに移行した際に互換性がなく、コード修正が必要になった箇所について紹介します。自作アプリ内で気づいた範囲のため、その他にも互換性がない箇所があると思いますが、今回分かった範囲で紹介したいと思います。


⓪ライブラリの変更
当然ながらライブラリを変更します。

import TkEasyGUI as sg
#import PySimpleGUI as sg


@テーマ
テーマ名が異なるため、'DarkGreen6'等のテーマは使用できません。
コメントアウトするか、下記のようにデフォルトもしくはwinライクなテーマを設定する必要があります

sg.theme('default')
sg.theme('winnative')

Aupdate
Updateからupdateに修正が必要です

window["-msg-"].Update("Some Message")
window["-msg-"].update("Some Message")

Brefresh
Refreshからrefreshに修正が必要です
window.Refresh()
window.refresh()

Cvalue
テキストボックスのvalueはTkEasyGUIでは定義されていません。
下記のように第一引数に変更する必要があります。
window["-msg-"].(value='OK', text_color='#00F000')
window["-msg-"].('OK',text_color='#00F000')


Dvisible
見ないようにするvisible機能はTkEasyGUIでは定義されていません。
項目自体を削除するか、消したのと同じような処理に修正する必要があります。
visible=false
➡ないので削除する


互換性がないのは仕方ないことですが、ライブラリだけ移行するだけでは下記のように非常に分かりにくいエラーが発生するのみで原因を調べるのに苦労しました。上記のような修正をすることでTkEasyGUIに移行して同等の機能を確認することができました。


return self.tk.call(self._w, 'cget', '-' + key)
~~~~^~~~~
TypeError: can only concatenate str (not "int") to str

この他にも互換性がない部分について分かれば紹介してみたいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック