TkEasyGUIの基本的な使い方
TkEasyGUIの使い方についてまとめていますが、PySimpleGUIを使ったことのある人ならすぐに使えると思います。
1. TkEasyGUIとは
TkEasyGUIは、Pythonで簡単にGUIアプリケーションの作成ができるライブラリです。
従来のTkinterなどのUIライブラリは複雑な処理が必要でしたが、TkEasyGUIはPySimpleGUIのシンプルな概念を引き継ぎつつ、独自の機能を追加することでより簡単にGUI開発を行うことができます。
特徴
GUIアプリケーションを簡単かつシンプルに作成することができます。
GUIライブラリPySimpleGUIと互換性があります。
直感的にGUIアプリケーションを作成できる。
MITライセンス
2. インストール
以下のコマンドを使いTkEasyGUIをインストールします。
pip install TkEasyGUI
3. 基本の使い方
TkEasyGUIには2つの使い方があります。
ポップアップダイアログを使ったシンプルなGUI
カスタムウィンドウを使った本格的なGUI
この2種類の基本的な使い方について説明していきます。
3.1 ポップアップダイアログ
ポップアップダイアログを使うことで最も簡単にGUIを作成することができます。
メッセージを表示させるダイアログ
import TkEasyGUI as eg
eg.print("ダイヤログの表示")
入力ボックス付きのダイアログ
import TkEasyGUI as eg
name = eg.input("名前の入力")
eg.print(f"こんにちは, {name}.")
入力フィールドに名前を入れ、OKボタンを押すと「こんにちは、○○」とポップアップが出ます。
色を選択するダイアログ
import TkEasyGUI as eg
color = eg.popup_color(title="色を選択")
eg.print(f"color={color}")
色を選択するとカラーコードが返ってきます。
他にもフォーム、ファイル選択などのダイアログがあります。
3.2 カスタムウィンドウ
カスタムウィンドウは、大まかに3つの要素で構成されています。
レイアウトの定義
表示するウィジェット(テキスト、ボタン、入力フィールドなど)を配置
ウィンドウの表示
定義したレイアウトをもとにウィンドウを生成
イベントループ
ユーザの操作を監視し、アクションの実行
以下は、TkEasyGUIの基本的なコードです。
ウィンドウにテキスト、ボタンのウィジェットを表示します。
import TkEasyGUI as eg
# 1. 画面のレイアウト
layout = [
[eg.Text("こんにちは")], # 1行目
[eg.Button("click")] # 2行目
]
# 2. ウィンドウの表示
with eg.Window("App", layout) as window:
# 3. イベントのループ
for event, values in window.event_iter():
# ボタンの「click」が押されたときに発生するイベント
if event == "click":
# valuesの値をポップアップでメッセージを表示
eg.print("クリックされました")
ボタンの「click」を押すことで、イベントが発生し、設定した処理がされます。
TkEasyGUIはPySimpleGUIと互換性があり、同じ方法で記述することができます。
import TkEasyGUI as eg
# 画面のレイアウト
layout = [
[eg.Text("こんにちは")],
[eg.Button("click")]
]
# ウィンドウの定義
window = eg.Window("App", layout)
# イベントのループ
while True:
event, values = window.read()
# 左上のバツボタンでウィンドウを閉じる
if event in ["Exit", eg.WINDOW_CLOSED]:
break
# ボタンの「click」が押されたときに発生するイベント
if event == "click":
eg.popup("クリックされました")
window.close()
4. 応用
TkEasyGUIを使ったいくつかの応用です。
コンピュータとじゃんけんし、勝敗記録をつけるGUIです。
import TkEasyGUI as eg
from random import randint
def judge(user, cpu):
"""じゃんけんの勝ち負けを決める
Args:
user: ユーザの手
cpu: コンピュータの手
Returns:
勝ち負け
"""
result = (user - cpu + 3) % 3
if result == 0:
return "あいこ"
elif result == 2:
return "勝ち"
else:
return "負け"
def display_game_result(window, player, cpu, counter):
"""じゃんけんの結果を記録し、GUIのテキストエリアに表示を更新する。
Args:
window: PySimpleGUIのウィンドウオブジェクト
player: プレイヤーの手
cpu: コンピュータの手
counter: ラウンド数
Returns:
None
"""
result = judge(player, cpu)
data = [str(counter), result, rsp[player], rsp[cpu]]
record.append(data)
# -PLAY_DATA キーの値を更新する
window["-PLAY_DATA"].update(values=record[::-1])
# じゃんけん結果記録
record = []
# じゃんけんの手の設定
rsp = {
0 : "グー",
1 : "チョキ",
2 : "パー"
}
# じゃんけん回数
counter = 0
# 画面のレイアウト
layout = [
[eg.Table(
values=record, # 値
headings=["回数", "結果", "プレイヤー", "コンピュータ"], # 見出し
col_widths=[10, 10, 10, 10], # 列の幅
key="-PLAY_DATA", # 要素の参照キー
)],
# expand_x は左右の空間を埋めます
[eg.Button("グー", key="-ROCK-", expand_x=True), eg.Button("チョキ", key="-SCISSORS-", expand_x=True), eg.Button("パー", key="-PAPER-", expand_x=True)]
]
# ウィンドウの表示
with eg.Window("じゃんけん", layout) as window:
# イベントのループ
for event, values in window.event_iter():
cpu = randint(0, 2)
counter += 1
if event == "-ROCK-":
display_game_result(window, 0, cpu, counter)
if event == "-SCISSORS-":
display_game_result(window, 1, cpu, counter)
if event == "-PAPER-":
display_game_result(window, 2, cpu, counter)
グ、チョキ、パーのボタンを押すことでコンピュータのランダムな手とじゃんけんをすることができます。じゃんけんした結果をテーブルに記録していきます。
MarkItDownを使ったファイルなどをマークダウンに変換するGUIです。
MarkItDownとは、様々なファイルをマークダウンに変換するライブラリです。
import TkEasyGUI as eg
from markitdown import MarkItDown
from datetime import datetime
# 画面のレイアウト
layout = [
[eg.Text("URLまたは、ファイル選択してください。▽")],
[eg.Input("", key="-FILE", expand_x=True), eg.FileBrowse("ファイルの選択")],
[eg.Button("変換", key="-RUN-")],
[eg.Multiline("", key="-DISPLAY")],
[eg.Button("保存", key="-save-"), eg.Button("リセット", key="-RESET-")]
]
md = MarkItDown()
# ウィンドウの表示
with eg.Window("MarkItDownGUI", layout) as window:
# イベントのループ
for event, values in window.event_iter():
if event == "-RUN-":
try:
# マークダウンの変換
result = md.convert(values["-FILE"])
window["-DISPLAY"].update(result.text_content)
except:
eg.popup_error("MDに変換できませんでした")
if event == "-save-":
# 保存するファイル名
file_name = f"{datetime.now().strftime('%Y%m%d%H%M%S')}.md"
# ファイルの保存
eg.save_text_file(file_name, values["-DISPLAY"])
# 保存されたことを知らせるポップアップ
eg.popup_auto_close("保存されました")
if event == "-RESET-":
# 変換したテキストを白紙にする
window["-DISPLAY"].update("")
ファイルの選択かURLを入力フィールドに入れ、変換を押すとマークダウンに変換されたものが出力されます。
保存を押すと変換したものを保存することができます。
5. サンプルを使う
TkEasyGUIにはのサンプルがたくさん用意されています。
サンプルコードは「tkeasygui-python/tests」にあります。
サンプルコードの動かし方とコードの解説をまとめた記事がありますので参考にしてください。
備考
TkEasyGUIを開発されたkujirahandさんのNoteも参考にしてください。