PySimpleGUI備忘録～いろんな引数～

# はじめに
PySimpleGUIを使用したいが、日本語版の説明が乏しくて、毎度調べるのが大変。
めんどくさいのでここを見れば思い出せるように覚えておきたいものを記録する。
基本的には、各引数を調べたい場合、公式サイトの[Call Reference](https://pysimplegui.readthedocs.io/en/latest/call%20reference)を参照するとよいです。
※この記事は私が学生のときに書いていたものです。
限定公開していたけど、もったいないと思い投稿しなおしました。

# 目次(関数ごと)
ウィンドウの設定
[sg.Window](#sgwindow)
[sg.theme](#sgtheme)
レイアウト内で使用するもの
[sg.Text](#sgtext)
[sg.Button](#sgbutton)
[sg.Tab および sg.TabGroup](#sgtabおよびsgtabgroup)


# sg.Window
この関数はウィンドウを作成するときに用いる。
以下、例プログラム。

```py:window.py
import PySimpleGUI as sg  # ライブラリの読み込み

sg.theme('LightBrown1')

def make_main():
    # ----------------------------------------メインウィンドウ作成--------------------------------------------
    # レイアウト作成
    main_layout = [[sg.Text('あいうえ', font=('メイリオ', 22))],
                   [sg.Text('')],
                   [sg.Button('あ', font='メイリオ', size=(20, 2), button_color=('white', '#0E2E7B'),
                              tooltip=('周波数を変更する画面に行きます'), use_ttk_buttons=True, key='周波数')],
                   [sg.Button('い', font='メイリオ', size=(20, 2), button_color=('white', '#0E2E7B'),
                              use_ttk_buttons=True, key='切り出し')],
                   [sg.Button('う', font='メイリオ', size=(20, 2), button_color=('white', '#0E2E7B'),
                              use_ttk_buttons=True, key='チャンネル分割')],
                   [sg.Button('え', font='メイリオ', size=(20, 2), button_color=('white', '#0E2E7B'),
                              use_ttk_buttons=True, key='インパルス')],
                   [sg.Text('')]]
    # ウィンドウ作成
    return sg.Window('初期画面', main_layout, font='メイリオ', size=(600, 550), element_justification=('center'))
    # ----------------------------------------------------------------------------------------------------


window = make_main()

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

    if event == sg.WIN_CLOSED or event == "Exit":
        break

window.close()

```
このようなプログラムを実行すると以下の写真のような画面ができる。
![File.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935940/069ce9ad-191a-daae-5913-4944393e5d3b.jpeg)

```Python:例
sg.Window('初期画面', main_layout, font='メイリオ',
          size=(600, 550), element_justification=('center'))
```

よく使う引数は、上のようなものである。
この場合は、**第一引数**に作成する**ウィンドウのタイトル名**、**第二引数**に**レイアウトを格納している変数名**、**第三引数**にウィンドウ内で使用する**フォント**、**第四引数**にウィンドウの**サイズ**、**第五引数**にウィンドウ内の**要素の配置場所**(今回は真ん中)を指定している。

ほかにも、
ウィンドウ内の様々な要素のデフォルトを細かく設定したり(たくさんある)、
ウィンドウが表示される位置を調整したり(location)、
タイトルの横に表示されるアイコンの画像を変更したり(icon)(基本的にbase64を使用するべき)など、ウィンドウの引数はめっちゃたくさんあるから用途に応じて公式説明書のウィンドウの項目を[チェック](https://pysimplegui.readthedocs.io/en/latest/call%20reference//#window-the-window-object)

# sg.theme
pythonで以下のコードを実行するか、

```py
import PySimpleGUI as sg
sg.theme_previewer()
```

この素晴らしいまとめサイトを見よう！
[テーマの画像を全部まとめてくださっている素晴らしいページ](https://nonbiri3.com/?p=2120)

# sg.Text
レイアウトで用いる関数の一つ
ウィンドウ内にテキストや空白を置くことができる。

```py:例
sg.Text('あいうえ', font=('メイリオ', 22))
```
こんな感じで使う
この例では最初に置きたい文字列を記載して、第２引数でフォントと文字サイズを指定している
***
**おすすめ引数**

**font=('フォント名', 文字サイズ)**　サイズはintを使用
**pad=(文字の横の空白の幅, 文字の下の空白の幅)**　intを使用
**key=('なまえ')** このテキストをどこかで使いたいときの鍵のなまえ
**grab=True** Trueのとき、この要素を掴むとウィンドウを移動させることができる
**tooltip='テキスト'**　要素の上にマウスが乗ったときにテキストが表示される
***

# sg.Button
こんな感じに使う

```py:tab.py
sg.Button('あ', font='メイリオ', size=(20, 2),
          tooltip=('あ！マウスのってる～'),
          use_ttk_buttons=True, key='--a--')
```
ここにある引数は、
ボタンの上に置く**文字列**、**フォント**、ボタンの**サイズ**、**ボタンにカーソルが乗ったときに表示されるテキスト**、**ttkボタン**を使用、**key**
です。
ttk使うとボタンが動的になるから使ってみてるけど、よくわかっていないです。
角が丸いボタンを作りたくて悩んだけど、どうやら引数ではつくれないため、画像データを作成する必要がある、、、。余裕があったら作ろ。

# sg.Tab および sg.TabGroup
画面内にタブを生成する。
以下サンプルプログラム。

```py:例
import PySimpleGUI as sg  # ライブラリの読み込み

sg.theme('DarkTeal')


def make_main():
    # ----------------------------------------メインウィンドウ作成--------------------------------------------
    # レイアウト作成
    # タブ0：aaa
    tab0 = [[sg.Text('ほあ～～～～～～～')],
            [sg.Button('ボタン')],
            [sg.Text(' ', size=(10, 50))]]
    # タブ1：iii
    tab1 = []

    # タブ2：uuu
    tab2 = []

    # タブ3：eee
    tab3 = []

    # タブ4：ooo
    tab4 = []

    #レイアウト統合
    main_layout = [[sg.Text('行いたい動作を選択してください', font=('メイリオ', 22))],
                   [sg.TabGroup([[sg.Tab('aaaあああああ', tab0),
                                  sg.Tab('iiiいいい', tab1),
                                  sg.Tab('uuuうううう', tab2),
                                  sg.Tab('eeeええええ', tab3),
                                  sg.Tab('oooお', tab4)]])]]
    # ウィンドウ作成
    return sg.Window('初期画面', main_layout, font='メイリオ', size=(600, 500), element_justification=('center'))
    # ----------------------------------------------------------------------------------------------------


window = make_main()

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

    if event == sg.WIN_CLOSED or event == "Exit":
        break

window.close()

```

こんな感じのができる
![aaaaaaaaaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935940/59243e81-9b23-de2b-706d-54e6db422821.png)
タブだ～
タブの部分だけ切り取ります

```py:例
    main_layout = [[sg.Text('行いたい動作を選択してください', font=('メイリオ', 22))],
                   [sg.TabGroup([[sg.Tab('aaaあああああ', tab0),
                                  sg.Tab('iiiいいい', tab1),
                                  sg.Tab('uuuうううう', tab2),
                                  sg.Tab('eeeええええ', tab3),
                                  sg.Tab('oooお', tab4)]])]]
```
sg.Tab['タブの名前', タブで使用するレイアウトの変数]
sg.TabGroup[ ( [ [sg.Tab(), sg.Tab()…] ] ) ]