PysimpleGUI メッセージログボックスの作り方

2021年6月9日

こんにちは、せつやです。

今回は、PysimpleGUIシリーズ第5弾として「メッセージログボックス」の作り方になります。
プログラムの処理の経過を表示させたいという方は
参考になると思いますので、是非みていってください。

PysimpleGUI メッセージログボックス完成サンプル画像

入力ボックスに入れた値を、メッセージログボックスに改行して表示させて行きます。
上記サンプルでは、ボタンを押したときにメッセージを出力させていますが
プログラム実行中の状態を表示させる場合にも活用できると思いますので、カスタマイズして
使用してみてください。

メッセージログボックス部分のコード

layout = [
           [ sg.Multiline( default_text="",
                               size=(60,11),
                 border_width=2,
                               text_color="#000000",
                               background_color="#ffffff",
                               key='logbox')
           ],
         ]

解説付きコード

layout = [
                           # (1) ボックス内の初期値を設定します。
           [ sg.Multiline( default_text="",
               # ボックスのサイズを設定します。(横幅,縦幅)
                           size=(60,11),
               # ボックスの額縁の深さを設定します。
                           border_width=2,
               # ボックス内のテキストカラーを設定します。
                           text_color="#000000",
               # ボックスの背景カラーを設定します。
                           background_color="#ffffff",
               # ボックスの名前を設定します。
                           key='logbox')
           ],
         ]
(1) ボックス内の初期値
sg.Multiline( default_text="",

最初にボックスを表示させた際、あらかじめテキストを設定させておくこともできます。

例:default_text="ここに文字が出力されます" など

ボタンの動作部分のコード

    # ボタンを押したときの処理
    if event == "button1":
      # (1) メッセージログボックスに表示させる内容を編集
        text = str(values['input1'] + "\n" + text)
      # (2) メッセージログボックスの内容を更新
        window['logbox'].update(text)
      # (3) 入力ボックスの中身を空にします。
        window['input1'].update("")
(1) メッセージログボックスに表示させる内容を編集します。
text = str(values['input1'] + "\n" + text)

text 変数に 入力ボックスに入っている内容と text変数にもとから入っている値を追加します。

(2) メッセージログボックスの内容を更新します。
window['logbox'].update(text)

メッセージログボックス window['logbox’] の表示を

text に格納されているデータに更新します。

(3) 入力ボックスの中身を空にします。
window['input1'].update("")

既にメッセージログにデータが格納されたので、入力ボックスの値を空にしています。

Pythonでそのまま使えるサンプルコード

# coding: utf-8
# *************************************************************************************
# * PysimpleGUI メッセージログボックスの作り方
# *************************************************************************************
# *====================================================================================
# * インポートライブラリ
# *====================================================================================
# +-----------------------------------------------------------------------------------+
# + PySimpleGUI
# +-----------------------------------------------------------------------------------+
#(pip install pysimplegui)
import PySimpleGUI as sg

# +-----------------------------------------------------------------------------------+
# + PyAutoGUI
# +-----------------------------------------------------------------------------------+
#(pip install pyautogui)
import pyautogui as pg

#-------------------------------------------------------------------------------------+
# スレッド処理
#-------------------------------------------------------------------------------------+
import threading

# *====================================================================================
# * GUI作成
# *====================================================================================
# +-----------------------------------------------------------------------------------+
# + スタイル設定
# +-----------------------------------------------------------------------------------+
sg.theme('Dark Blue 3')

# +-----------------------------------------------------------------------------------+
# + レイアウト設定
# +-----------------------------------------------------------------------------------+
layout = [
           [ sg.Multiline( default_text="",
                               size=(60,11), border_width=2,
                               text_color="#000000",
                               background_color="#ffffff",
                               key='logbox')
           ],

           # 入力ボックス
           [ sg.InputText("",font=('メイリオ',14),
                               size=(29,0),
                               pad=((5,0),(5,5)),
                               key='input1'),

                     sg.Submit(button_text='OK',
                               font=('yu Gothic UI',10),
                               size=(15,1),
                               key='button1')
           ]
         ]

# +-----------------------------------------------------------------------------------+
# + ウィンドウ作成
# +-----------------------------------------------------------------------------------+
window = sg.Window('メッセージログ',layout,size=(475,235))

# *====================================================================================
# * プログラム開始
# *====================================================================================
text = ""

# +-----------------------------------------------------------------------------------+
# + GUIループ
# +-----------------------------------------------------------------------------------+
while True:
    event, values = window.read()
        
    if event is None:
        break

    if event == "button1":
        text = str(values['input1'] + "\n" + text)
        window['logbox'].update(text)
        window['input1'].update("")

Pythonをまとめて学びたい方は、まずは無料オンラインセミナーがおすすめ