🎉

[更新中1]PySimpleGUIを初学ノート

2021/07/31に公開

PySimpleの概要

・PythonデフォルトのGUIフレームワーク(Tkinter)のラッパー
・簡単なPythonライクな構文
githubページ
referenceページ

PySimpleのセットアップ

ubuntu 20でのインストール方法
※githubページを参照

インストールコマンド

python3 -m pip install PySimpleGUI

// アップグレートコマンド
// python3 -m pip install --upgrade --no-cache-dir PySimpleGUI

PySimpleGUIで小さなアプリを作る

※githubページを参照

  1. pythonファイルを作成。

    first_gui.py
    import PySimpleGUI as sg
    
    filename = sg.popup_get_file('ファイルを入力する')
    sg.popup('入力完了!', filename)
    
  2. pythonで実行

    python3 first_gui.py
    
  3. GUIアプリが表示される

PySimpleGUIのウィンドウ画面

画像を表示する

  1. pythonファイルを作成。

    display_image.py
    import PySimpleGUI as sg
    
    layout = [
            [sg.Image('/home/kiduki/file_path',size=(800,550))],
            ]
    
    window = sg.Window('画面を表示',layout)
    event, values = window.read()
    
  2. pythonで実行

    python3 display_image.py
    
  3. 画像が表示される
    ごろごろする犬のイラスト

画像の透過部分をクリックスルーにする

ubuntuだとできなそう。

// windowsの場合はsg.Windowsの引数にtransparent_color=Trueを指定することで実現できる。
// transparent_colorがwindowsのみ対応の旨を記載しているドキュメントは見つからなかったがプログラムを実行すると、その旨を示すエラーメッセージが表示された。

タイトルバーを表示しない

タイトルバーを表示しない場合は、ウィンドウを閉じるための仕組みを作る。
以下の場合はenable_events=Trueでウィンドウをクリックしたときにイベント発火するようにしている。

no_titlebar.py
  import PySimpleGUI as sg

  layout = [
          [sg.Image(
              '/home/kiduki/file_path',
              size=(800, 550),
              enable_events=True)]]

  window = sg.Window(
          '画面を表示',
          layout,
          no_titlebar=True)

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

  window.close()

no_titlebar

ウィジェットの内容を更新する

  1. ウィジェットをアップデートするには、ボタンのクリックなどをevent, values = window.read()で捕捉する。
  2. window[(key)]でウィジェットを指定し、各ウィジェットで提供されるメソッドを利用してプロパティを更新する。
update_contents.py
import PySimpleGUI as sg

layout = [
        [sg.Text('contents', key='id1', size=(15, 3))],
        [sg.Button('update', key='btn1')], [sg.Button('enlarge', key='btn2')]]

window = sg.Window(
        'コンテンツの内容を更新する',
        layout)

while True:
    event, values = window.read()
    if event is None:
        break
    if event == 'btn1':
        window['id1'].update('update contents')
    elif event == 'btn2':
        window['id1'].set_size(size=(30, 6))

window.close()

コンテンツの内容を更新する

ファイルの内容を表示する

python標準メソッドのopenを利用して、ファイルの内容を表示する。

import PySimpleGUI as sg

filename = sg.popup_get_file('ファイルを入力する')
sg.popup('ファイルの内容を表示', open(filename, mode='r').read())

display_text_in_file.gif

ウィンドウを複数表示する

sg.Window(*,*).read()を2回実行することで、Windowをもう2つ開く。

multi_window.py
import PySimpleGUI as sg

layout = [[sg.Button("新しいWindowを開く", key="open")]]
window = sg.Window("Main Window", layout)

while True:
    event, values = window.read()
    if event is None:
        break
    if event == "open":
        sg.Window("New Window", [[sg.Text("新しいWindowを開きました")]]).read()
        break

window.close()

multi_window

Discussion