見出し画像

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つの使い方があります。

  1. ポップアップダイアログを使ったシンプルなGUI

  2. カスタムウィンドウを使った本格的な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つの要素で構成されています。

  1. レイアウトの定義

    • 表示するウィジェット(テキスト、ボタン、入力フィールドなど)を配置

  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」を押すことで、イベントが発生し、設定した処理がされます。

eventには、ユーザが操作したウィジェットの名前または、キーを取得します。ウィジェットにキーが設定されていれば、キーを優先して取得します。
valuesには、ウィジェットの値を取得します。

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も参考にしてください。

いいなと思ったら応援しよう!