PySimpleGUI

GUI用エレメント(ウイジェット・部品)の設定の仕方

簡単なことだけど、すぐ忘れるのでここに書いております。

#layoutに使用する主なエレメント
sg.Text:テキストの表示
sg.Input:一行のテキスト入力欄
sg.Multiline:複数行のテキスト入出力
sg.Listbox:指定された値が一覧表示され、その中から選択
sg.Radio:同じgroup_idで指定された複数の選択肢から1つを選択
sg.Checkbox:はい/いいえの二者択一
sg.Spin:矢印を使用して選択するリストボックス
sg.Button:何らかのイベントを実行

#モジュールやパッケージをimportする
import PySimpleGUI as sg
import random
from PIL import Image, ImageTK
import webbrowser
import os, ir, glob etc

#ボタンの背景色と文字色、順序を間違えないこと
button_color=('白文字', '背景色')

#jpg画像を変数に取り込む
image_holder = 'flower_holder'
image_files = glob.glob(f'{image_folder}/*.jpg)

#jpg画像をランダムに選択・表示する
random_image = random.choice(image_filies)
image = image.open(random_image)
image.thumbnail((200,300))(image)

# ランダムな画像ファイルを選択
random_image = random.choice(image_files)

# 画像を表示(from PIL import Image, ImageTK必要)
image = Image.open(random_image)
image.thumbnail((200, 300))  # サイズを調整
photo_img = ImageTk.PhotoImage(image)
window['-IMAGE-'].update(data=photo_img)

# ボタンなどをセンターに表示する
 #'center'が無いと「開始」「終了」が左端に来る
.Column(button_frame, element_justification='center', justification='center')],

# Menuの設定法 window画像はここを参照ください。
menu=[
['使い方',['「開始/次へ」で花の写真が表示されますので、',
'四つの選択肢から正解を選んでください。', ' ','閉じる']]]

menu=[
['使い方',['ボタン「次へ」を押下したままにすると、問題が表示されます。 マウスをリリース(離す)すると答え、ピンイン、備考が表示されます', ' ','閉じる']]]

layout = [
[sg.Menu(menu)],
[sg.Frame('この花の名前は?', left_frame, element_justification='center', size=(200, 300)),
sg.Frame('ここから選んでください', right_frame, element_justification='center', size=(300, 200))],
[sg.Column(button_frame, element_justification='center', justification='center')],

# text fileの読み込み 
with open("中国語基礎1_29_2024.txt", "r", encoding="utf-8") as f:
    word_list = [line.split('\t') for line in f.readlines()]

# 一般的な読込code 上の読み込み方法と比較すると煩雑である。
with open("中国語基礎1_25_2024.txt", "r", encoding="utf-8") as f: 
    list = f.readlines() 
word_list = []

for i in list:
    words = i.split('\t') #tab区分file
    word_list.append(words) #  print("15 :", word_list)

# マウスのpress/releaseで違う動作をさせる
# make the window
window = sg.Window('初歩の中国語', layout,element_justification='c', finalize=True)
window["-ok-"].bind("<ButtonRelease>", "-release-", propagate=False)
window["-ok-"].bind("<ButtonPress>", "-press-", propagate=False)

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

    if event  in (None, 'Quit'):
        break

    if event == '-ok--press-':
        new_index = random.randint(0, len(word_list)-1)
        window['-question-']. Update(" "+word_list[new_index][0])
        window['-meaning-']. Update(" ")
        window['-pinyin-'].Update(" ")
        window['-ref-']. Update(" ")
        #window['-ok-'].Update('Show_meaning')
    elif event == '-ok--release-':
        window['-meaning-']. Update(" "+word_list[new_index][1])
        window['-pinyin-'].Update(" "+word_list[new_index][2])
        window['-ref-']. Update(word_list[new_index][3])
        #window['-ok-'].Update('Next')
 
---- end ----
PAGE TOP