🌟

PysimpleGui入門

2023/08/16に公開

PySimpleGUI使い方ガイド

目次- PySimpleGUI使い方ガイド

1. はじめに

PySimpleGUIは、PythonでGUIアプリケーションを手軽に開発するための強力なツールです。本セクションでは、PySimpleGUIがどのような特徴を持ち、どのような問題を解決するのかについて詳しく見ていきます。

1.1 PySimpleGUIとは?

PySimpleGUIは、シンプルなインターフェースと豊富な機能を備えたPythonライブラリです。従来のGUIライブラリよりもシンプルな構文を提供し、初心者から上級者まで幅広いユーザーに利用されています。その名前通り、シンプルで分かりやすいAPIを提供することが特徴であり、少ないコード行数で効果的なGUIアプリケーションを構築できます。

1.2 本記事の目的

この記事では、PySimpleGUIの基本的な概念から応用までをカバーしていきます。具体的には、ウィジェットの配置方法、イベントハンドリングの基本、ウィンドウの操作、デザインのカスタマイズ、高度なトピックなどについて詳しく説明します。PySimpleGUIを使ったGUIアプリケーションの開発において、どのようにして効率的に作業するかを学ぶことを目指しています。

次のセクションからは、PySimpleGUIの基本的な使い方について詳しく解説していきます。ウィジェットの使い方やイベントハンドリングの方法を理解することで、自分自身でGUIアプリケーションを作成できるようになるでしょう。

本記事を通じて、PySimpleGUIの魅力と潜在能力について深く理解し、実際のアプリケーション開発に活かしてみましょう。

2. 導入

PySimpleGUIを始める前に、基本的な概念と使い方について理解しましょう。このセクションでは、PySimpleGUIの基本的な導入方法と基本的な機能について紹介します。

2.1 使用方法の概要

PySimpleGUIは、シンプルな構文と直感的なウィジェット配置によって、PythonでのGUIアプリケーション開発を効率化します。以下では、PySimpleGUIの使用方法の概要を説明します。

2.1.1 ウィジェットの配置

PySimpleGUIでは、ウィンドウに配置するウィジェット(ボタン、テキスト、入力フィールドなど)をシンプルな方法で指定できます。例えば、以下のコードで「Hello, PySimpleGUI!」と表示するウィンドウを作成できます。

import PySimpleGUI as sg

layout = [[sg.Text("Hello, PySimpleGUI!")], [sg.Button("OK")]]
window = sg.Window("My Window", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == "OK":
        break

window.close()

2.1.2 イベントループ

PySimpleGUIのGUIプログラムでは、ウィンドウが表示された状態でユーザーの入力を待ち続ける必要があります。そのためには、イベントループと呼ばれる無限ループが使用されます。このセクションでは、イベントループの概念とその役割について詳しく説明します。

イベントとは?

イベントは、ユーザーが行う操作や、プログラム内で発生するアクションを表します。例えば、ボタンのクリック、キーの入力、ウィンドウのクローズなどがイベントとして扱われます。PySimpleGUIのGUIプログラムでは、これらのイベントを感知して適切なアクションを実行することが求められます。

イベントループの動作

イベントループは、ユーザーの入力やイベントが発生するのを待ち続ける無限ループです。基本的な構造は以下のようになります。

while True:
    event, values = window.read()  # イベントの待機とデータの取得
    if event == sg.WIN_CLOSED:
        break  # ウィンドウが閉じられたらループを終了

上記の例では、window.read()がイベントを待ち、イベントが発生したらそれに対応するアクションを実行します。もしウィンドウが閉じられた場合、sg.WIN_CLOSEDというイベントが発生するため、これを検知してループを終了します。

イベントハンドリングの重要性

イベントループを正しく実装することは、GUIプログラムの正常な動作に不可欠です。ユーザーの操作に迅速に対応し、適切なアクションを実行するためには、イベントハンドリングのコードを適切に配置することが重要です。正しく実装されたイベントループによって、ユーザーとのインタラクションがスムーズに行えるようになります。

2.1.3 GUIプログラムの終了

PySimpleGUIのGUIプログラムを終了する方法について理解しましょう。プログラムの終了は、ユーザーがウィンドウを閉じるか、特定のアクションを実行した場合に行われます。このセクションでは、GUIプログラムを正しく終了させる方法を詳しく説明します。

ウィンドウのクローズイベント

GUIプログラム内で最も一般的な終了条件は、ウィンドウがクローズされたときです。ウィンドウがクローズされると、プログラムはイベントループから抜けて終了します。以下のコードは、ウィンドウのクローズイベントを処理する例です。

import PySimpleGUI as sg

layout = [[sg.Text("Hello, PySimpleGUI!")], [sg.Button("OK")]]
window = sg.Window("Exit Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break  # ウィンドウが閉じられたらプログラムを終了

window.close()
特定のアクションによる終了

ユーザーが特定のアクション(ボタンクリックなど)を実行した場合にも、GUIプログラムを終了させることができます。以下のコードは、ボタンクリックによってプログラムを終了する例です。

import PySimpleGUI as sg

layout = [[sg.Text("Hello, PySimpleGUI!")], [sg.Button("Exit")]]
window = sg.Window("Exit Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == "Exit":
        break  # ウィンドウが閉じられたか「Exit」ボタンがクリックされたらプログラムを終了

window.close()

プログラムを正しく終了させることは、ユーザーエクスペリエンスとプログラムの動作に影響を与える重要な要素です。ウィンドウのクローズイベントや特定のアクションに対する処理を適切に実装することで、ユーザーとの対話をスムーズに終了できます。

2.1.4 サンプルに沿った説明

このセクションでは、PySimpleGUIを使用した基本的なウィジェットの配置方法やウィンドウの操作方法を、具体的なサンプルコードを交えて詳しく説明します。以下のサンプルを通じて、PySimpleGUIの基本的な使い方を理解しましょう。

2.1.4.1 ウィジェットのサイズ設定

ウィジェットのサイズを設定するには、ウィジェットのインスタンス生成時にsize引数を指定します。例えば、以下のコードは、テキストを表示するウィンドウを作成し、テキストの幅と高さを設定しています。

import PySimpleGUI as sg

layout = [[sg.Text("Hello, PySimpleGUI!", size=(20, 2))], [sg.Button("OK")]]
window = sg.Window("Size Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == "OK":
        break

window.close()

2.1.4.2 デザインテーマの設定

PySimpleGUIでは、ウィンドウのデザインテーマをカスタマイズすることができます。以下のコードは、デザインテーマを設定したウィンドウを作成する例です。

import PySimpleGUI as sg

sg.theme("DarkBlue3")  # デザインテーマを設定

layout = [[sg.Text("Hello, PySimpleGUI!")], [sg.Button("OK")]]
window = sg.Window("Theme Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == "OK":
        break

window.close()

2.1.4.3 ウィジェットのイベントハンドリングの有効化

PySimpleGUIでは、ウィジェットのイベント(ボタンクリックなど)を処理するために、イベントハンドリングを有効化する必要があります。以下のコードは、ボタンクリックイベントを処理する例です。

import PySimpleGUI as sg

layout = [[sg.Text("Hello, PySimpleGUI!")], [sg.Button("OK")]]
window = sg.Window("Event Handling Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "OK":
        sg.popup("Button clicked!")

window.close()

2.1.4.4 ウィジェットへの名前の付与

ウィジェットに名前を付与することで、特定のウィジェットを識別しやすくなります。以下のコードは、名前付きのボタンを配置する例です。

import PySimpleGUI as sg

layout = [[sg.Text("Hello, PySimpleGUI!")], [sg.Button("OK", key="ok_button")]]
window = sg.Window("Named Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "ok_button":
        sg.popup("OK button clicked!")

window.close()

2.1.4.5 既存のウィジェットへのアクセス

ウィンドウ内の既存のウィジェットにアクセスするには、window[ウィジェットの名前]という形式でアクセスします。以下のコードは、名前付きのテキストを更新する例です。

import PySimpleGUI as sg

layout = [[sg.Text("Hello, PySimpleGUI!", key="output_text")], [sg.Button("Update")]]
window = sg.Window("Access Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Update":
        window["output_text"].update("Updated text!")

window.close()

これらのサンプルコードを通じて、PySimpleGUIの基本的な機能を理解し、自分自身でGUIアプリケーションを構築する際の手法を学びました。

3. ウィジェット(Widgets)

PySimpleGUIでは、様々な種類のウィジェット(GUI要素)を使用して、ユーザーインターフェースを構築することができます。ウィジェットはテキストやボタン、入力フィールドなど、GUIアプリケーションの各要素を表します。このセクションでは、PySimpleGUIで使用可能な主要なウィジェットについて詳しく説明します。

3.1 文字列,画像の表示

3.1.1 Text

テキストを表示するためのウィジェットです。テキストウィジェットを使用することで、ユーザーに情報を表示することができます。フォントや余白、枠線の設定も可能です。

import PySimpleGUI as sg

layout = [[sg.Text("Hello, PySimpleGUI!")]]
window = sg.Window("Text Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

3.1.2 Image

画像を表示するためのウィジェットです。画像ファイルのパスを指定して表示することができます。サイズの調整や配置も行えます。

import PySimpleGUI as sg

layout = [[sg.Image("image.png")]]
window = sg.Window("Image Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

3.2 文字の入力

3.2.1 InputText

ユーザーに文字を入力させるためのウィジェットです。テキストボックスやパスワード入力フィールドとして使用できます。イベントハンドリングや初期値の設定が可能です。

import PySimpleGUI as sg

layout = [
    [sg.Text("Enter your name:"), sg.InputText()],
    [sg.Text("Enter your password:"), sg.InputText(password_char="*")],
    [sg.Button("Submit")]
]
window = sg.Window("InputText Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        name = values[0]
        password = values[1]
        sg.popup(f"Name: {name}\nPassword: {password}")

window.close()

3.2.2 Multiline

複数行のテキスト入力を受け付けるためのウィジェットです。複数行のテキストを編集する場合に使用します。

import PySimpleGUI as sg

layout = [
    [sg.Multiline("Enter your notes here:", size=(30, 5))],
    [sg.Button("Save")]
]
window = sg.Window("Multiline Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Save":
        notes = values[0]
        sg.popup(f"Notes saved:\n{notes}")

window.close()

3.3 ボタン類

3.3.1 Button

ユーザーのアクションをトリガーするためのボタンです。クリックされると特定のイベントが発生します。

import PySimpleGUI as sg

layout = [[sg.Button("Click me")]]
window = sg.Window("Button Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Click me":
        sg.popup("Button clicked!")

window.close()

3.3.2 Checkbox

チェックボックスを表示し、オン・オフの状態を扱うためのウィジェットです。

import PySimpleGUI as sg

layout = [
    [sg.Checkbox("Enable feature A"), sg.Checkbox("Enable feature B")],
    [sg.Button("Submit")]
]
window = sg.Window("Checkbox Widget Example", layout)

while True:
   

 event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        feature_a = values[0]
        feature_b = values[1]
        sg.popup(f"Feature A: {feature_a}\nFeature B: {feature_b}")

window.close()

3.3.3 Radio

ラジオボタンを表示し、複数の選択肢から1つを選ぶためのウィジェットです。

import PySimpleGUI as sg

layout = [
    [sg.Radio("Option 1", "radio_group", default=True), sg.Radio("Option 2", "radio_group")],
    [sg.Button("Submit")]
]
window = sg.Window("Radio Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        option = "Option 1" if values[0] else "Option 2"
        sg.popup(f"Selected option: {option}")

window.close()

3.4 選択入力

3.4.1 Listbox

リストから選択肢を選ぶためのウィジェットです。複数の項目から1つ以上を選択できます。

import PySimpleGUI as sg

choices = ["Option 1", "Option 2", "Option 3"]
layout = [
    [sg.Listbox(choices, size=(20, 3))],
    [sg.Button("Submit")]
]
window = sg.Window("Listbox Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        selected_options = values[0]
        sg.popup(f"Selected options: {', '.join(selected_options)}")

window.close()

3.4.2 Spin

数値の選択や調整を行うためのウィジェットです。最小値と最大値を指定できます。

import PySimpleGUI as sg

layout = [
    [sg.Spin(values=list(range(1, 11)), initial_value=5, size=(5, 1))],
    [sg.Button("Submit")]
]
window = sg.Window("Spin Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        selected_value = values[0]
        sg.popup(f"Selected value: {selected_value}")

window.close()

3.4.3 Slider

数値の範囲を選択するためのウィジェットです。最小値と最大値、初期値を指定できます。

import PySimpleGUI as sg

layout = [
    [sg.Slider(range=(0, 100), default_value=50, orientation="h", size=(20, 15))],
    [sg.Button("Submit")]
]
window = sg.Window("Slider Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        selected_value = values[0]
        sg.popup(f"Selected value: {selected_value}")

window.close()

3.5 枠,区切り線

3.5.1 Frame

ウィジェットをグループ化するための枠を表示するためのウィジェットです。関連するウィジェットをまとめて表示する場合に使用します。

import PySimpleGUI as sg

layout = [
    [sg.Frame("Group 1", [[sg.Text("Widget 1")]])],
    [sg.Frame("Group 2", [[sg.Text("Widget 2")]])],
    [sg.Button("Submit")]
]
window = sg.Window("Frame Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        sg.popup("Submit button clicked!")

window.close()

3.5.2 VerticalSeparator

垂直方向の区切り線を表示するためのウィジェットです。ウィジェットのレイアウトを調整する際に使用します。

import PySimpleGUI as sg

layout = [
    [sg.Text("Left side"), sg.VerticalSeparator(), sg.Text("Right side")],
    [sg.Button("Submit")]
]
window = sg.Window("VerticalSeparator Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        sg.popup("Submit button clicked!")

window.close()

3.6 進捗バー

進捗状況を視覚的に表示するためのウィジェットです。タスクの進行状況を示すために使用します。

import PySimpleGUI as sg

layout = [
    [sg.ProgressBar(100, orientation="h", size=(20, 15))],
    [sg.Button("Start")]
]
window = sg.Window("ProgressBar Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Start":
        progress_bar = window["ProgressBar"]
        for i in range(1, 101):
            progress_bar.UpdateBar(i)
        sg.popup("Task completed!")

window.close()

3.7 表,ツリー

3.7.1 Table

表形式のデータを表示するためのウィジェットです。データの表示や編集に使用します。

import PySimpleGUI as sg

data = [["John", 25, "Male"], ["Emily", 30, "Female"], ["Michael", 28, "Male"]]
layout = [
    [sg.Table(values=data, headings=["Name", "Age", "Gender"], display_row_numbers=False,
               auto_size_columns=False, justification="right")],
    [sg.Button("Submit")]
]
window = sg.Window("Table Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        sg.popup("Submit button clicked!")

window.close()

3.7.2 Tree

階層構造を持つデータを表示するためのウィジェットです。フォルダやファイルのツリー表示に適しています。

import PySimpleGUI as sg

data = {
    "Folder 1": ["File 1-1", "File 1-2"],
    "Folder 2": ["File 2-1", "File 2-2"]
}
layout = [
    [sg.Tree(data, headings=["Folders", "Files"], auto_size_columns=True,
             num_rows=10, col_widths=[30, 20])],
    [sg.Button("Submit")]
]
window = sg.Window("Tree Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        sg.popup("Submit button clicked!")

window.close()

3.8 様々な表示構造

3.8.1 Tab,TabGroup

複数のタブでコンテンツを切り替えるためのウィジェットです。異なる情報や機能をタブごとにまとめて表示するのに便利です。

import PySimpleGUI as sg

tab1_layout = [
    [sg.Text("Content of Tab 1")]
]
tab2_layout = [
    [sg.Text("Content of Tab 2")]
]
layout = [
    [sg.TabGroup([
        [sg.Tab("Tab 1", tab1_layout)],
        [sg.Tab("Tab 2", tab2_layout)]
    ])],
    [sg.Button("Submit")]
]
window = sg.Window("Tab Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        sg.popup("Submit button clicked!")

window.close()

3.8.2 Pane,Column

ウィジェットの配置を調整するためのウィジェットです。横に並べたり、縦に積み重ねたりする際に使用します。

import PySimpleGUI as sg

layout = [
    [sg.Pane([[sg.Text("Pane 1")]], size=(200, 100))],
    [sg.Column([[sg.Text("Column 1")]], size=(200, 100))],
    [sg.Button("Submit")]
]
window = sg.Window("Pane and Column Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        sg.popup("Submit button clicked!")

window.close()

3.9 メニュー

3.9.1 OptionMenu

ドロップダウンメニューを表示するためのウィジェットです。選択肢から1つを選ぶことができます。

import PySimpleGUI as sg

choices = ["Option 1", "Option 2", "Option 3"]
layout = [
    [sg.OptionMenu(choices, default_value="Option 1")],
    [sg.Button("Submit")]
]
window = sg.Window("OptionMenu Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        selected_option = values[0]
        sg.popup(f"Selected option: {selected_option}")

window.close()

3.9.2 MenuBar

アプリケーションのメニューバーを表示するためのウィジェットです。さまざまなコマンドやアクションをメニュー形式で提供できます。

import PySimpleGUI as sg

menu_def = [
    ["File", ["Open", "Save", "Exit"]],
    ["Edit", ["Cut", "Copy", "Paste"]]
]
layout = [
    [sg.Menu(menu_def)],
    [sg.Button("Submit")]
]
window = sg.Window("MenuBar Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        sg.popup("Submit button clicked!")

window.close()

3.9.3 ButtonMenu

ボタンをクリックした際にメニューを表示するためのウィジェットです。特定のアクションを選択する際に便利です。

import PySimpleGUI as sg

layout = [
    [sg.ButtonMenu("Options", menu_def=[
        ["Option 1", "Option 2", "Option 3"],
        ["Option 4", "Option 5", "Option 6"]
    ])],
    [sg.Button("Submit")]
]
window = sg.Window("ButtonMenu Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        sg.popup("Submit button clicked!")

window.close()

3.10 Canvas

図形やグラフィックスを描画するための領域を提供するウィジェットです。カスタムな描画を行いたい場合に使用します。

import PySimpleGUI as sg

layout = [
    [sg.Canvas(size=(200, 100), background_color="white", key="-CANVAS-")],
    [sg.Button("Draw Circle")]
]
window = sg.Window("Canvas Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Draw Circle":
        canvas = window["-CANVAS-"]
        canvas.draw_circle((100, 50), 30, fill_color="red", line_color="black")

window.close()

4. ポップアップウィンドウ

4.1 入力

ユーザーからの入力を受け付けるためのポップアップウィンドウです。テキスト入力フィールドやボタンを配置して情報の収集に使用します。

import PySimpleGUI as sg

layout = [
    [sg.Text("Enter your name:"), sg.InputText(key="-NAME-")],
    [sg.Button("Submit")]
]

window = sg.Window("PopupGetText Widget Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Submit":
        user_name = values["-NAME-"]
        sg.popup(f"Hello, {user_name}!")

window.close()

4.2 報告,確認のためのポップアップ表示

ユーザーに対して重要な情報を表示したり、アクションを確認するためにポップアップウィンドウを使用することがあります。sg.popup関数を使用して簡単にポップアップを表示できます。

import PySimpleGUI as sg

layout = [
    [sg.Text("Report and Confirmation Popup Example")],
    [sg.Button("Show Report"), sg.Button("Confirm Action")]
]

window = sg.Window("Report and Confirmation Popup Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Show Report":
        sg.popup("This is a report message.", title="Report")
    elif event == "Confirm Action":
        confirm = sg.popup_yes_no("Do you want to proceed?", title="Confirmation")
        if confirm == "Yes":
            sg.popup("Action confirmed.", title="Confirmation")

window.close()

上記のコードは、ボタンをクリックした際に報告や確認のポップアップを表示する例です。sg.popup関数を使用してタイトル付きのメッセージを表示できます。また、確認用のポップアップではsg.popup_yes_no関数を使用してYes/Noの選択を受け付け、ユーザーのアクションを確認します。

5. ウィンドウの扱い

5.1 リサイズ可能にする設定

ウィンドウのリサイズを許可するかどうかを設定するウィジェットです。リサイズが許可されていれば、ユーザーはウィンドウのサイズを変更できます。

import PySimpleGUI as sg

layout = [
    [sg.Text("Resizable Window Example")],
    [sg.Button("Exit")]
]

window = sg.Window("Resizable Window Example", layout, resizable=True)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

5.2 ウィンドウのサイズと位置について

ウィンドウのサイズや位置を指定する方法について説明します。ウィンドウの初期表示位置やサイズを設定できます。

import PySimpleGUI as sg

layout = [
    [sg.Text("Window Size and Position Example")],
    [sg.Button("Exit")]
]

window = sg.Window("Window Size and Position Example", layout, size=(300, 200), location=(100, 100))

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

5.3 テーマの設定

PySimpleGUIはさまざまなテーマを提供しており、ウィンドウの外観をカスタマイズできます。テーマを設定することで、アプリケーションのデザインを変更できます。

import PySimpleGUI as sg

sg.theme("DarkAmber")  # テーマの設定

layout = [
    [sg.Text("Themed Window Example")],
    [sg.Button("Exit")]
]

window = sg.Window("Themed Window Example", layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

5.4 タイトルバーの有無

ウィンドウのタイトルバーを表示するかどうかを設定するウィジェットです。タイトルバーなしでウィンドウを作成できます。

import PySimpleGUI as sg

layout = [
    [sg.Text("No Title Bar Window Example")],
    [sg.Button("Exit")]
]

window = sg.Window("No Title Bar Window Example", layout, no_titlebar=True)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

6. 付録

6.1 matplotlibで作成したグラフをレイアウトに埋め込む方法

PySimpleGUIを使用して作成したGUIに、matplotlibで作成したグラフを埋め込む方法について説明します。

import PySimpleGUI as sg
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

layout = [
    [sg.Text("Embedded Matplotlib Graph Example")],
    [sg.Canvas(size=(400, 300), key="-CANVAS-")],
    [sg.Button("Exit")]
]

window = sg.Window("Embedded Matplotlib Graph Example", layout)

# Matplotlibのグラフを作成
fig, ax = plt.subplots()
ax.plot([0, 1, 2, 3, 4], [0, 1, 4, 9, 16])
canvas_elem = FigureCanvasTkAgg(fig, window["-CANVAS-"].Widget)
canvas_elem.get_tk_widget().pack()

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

window.close()

6.2 Tkinterのオブジェクトとの対応

PySimpleGUIはTkinterとの連携も可能であり、Tkinterで使用できるオブジェクトをPySimpleGUIでも使用できます。これにより、既存のTkinterコードをPySimpleGUIに移行することが可能です。

import PySimpleGUI as sg
import tkinter as tk

# Tkinterのウィジェットを作成
root = tk.Tk()
label = tk.Label(root, text="Hello from Tkinter!")

layout = [
    [sg.Text("Tkinter Integration Example")],
    [sg.TkinterCanvas(master=root, container=layout, tk_widget=label)],
    [sg.Button("Exit")]
]

window = sg.Window("Tkinter Integration Example", layout, finalize=True)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

root.destroy()  # Tkinterウィンドウを破棄

window.close()

7. さいごに

本記事では、PySimpleGUIを使用したGUIアプリケーションの作成方法について詳細に説明しました。ウィジェットの配置からイベントハンドリング、テーマのカスタマイズ、外部ライブラリの統合まで、幅広いトピックをカバーしました。PySimpleGUIのシンプルなインターフェースと豊富なウィジェットの選択肢により、Pythonプログラマーは効率的に魅力的なGUIアプリケーションを構築できるでしょう。

8. 参考情報

是非、公式ドキュメントやGitHubリポジトリを参考にして、さらに高度なGUIアプリケーションの開発に挑戦してみてください。

お読みいただき、ありがとうございました!

9. 参考図書

独習Python

独習Python

Discussion