■FreeSimpleGUIでボタンではなくエンターキーで入力完了して次の処理に移行したい
参考出典 https://qiita.com/GOU_KUN/questions/cf940c9a85eba56cb29d
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
・windowにてreturn_keyboard_events=True
イベント判断でevent == "OK" or event == '\r':
とすればよいらしいが・・・
ーーーーーーーーーーーーーーーーーーーーーーーーー
出典にあるサンプルコード・・・このままでは狙い通りには動かない
ーーーーーーーーーーーーーーーーーーーーーーーーー
import PySimpleGUI as sg
sg.theme('DarkAmber')
layout = [ [sg.Text('何か入力してください')],
[sg.InputText()],
[sg.Button('OK'), sg.Button('キャンセル')] ]
window = sg.Window('エンターキーを押してOKをクリックさせたい', layout, alpha_channel=0.95, no_titlebar=True, grab_anywhere=True,return_keyboard_events=True)
#alpha_channel 半透明ウィンドウの透明率
#no_titlebar タスクバーにアイコン非表示
#grab_anywhere windowをドラッグ移動
while True:
event, values = window.read()
# print(f"event='{event}', code={ord(event[0])}, values={values}\n")
if event == sg.WIN_CLOSED or event == 'キャンセル' or event == 'Escape:27':
break
if event == "OK" or event == '\r':
print(f"values={values}")
window.close()
ーーーーーーーーーーーーーーーーーーーーーーーーー
実際に正しく動作したコード(Windows11の場合)
注意!このままコピペするとTABがスペースに変わることがある。
ーーーーーーーーーーーーーーーーーーーーーーーーー
import FreeSimpleGUI as sg
sg.theme('DarkAmber')
layout = [ [sg.Text('何か入力してください')],
[sg.InputText(key='Input')],
#[sg.InputText(key='Input', enable_events=True)],
[sg.Button('OK'), sg.Button('キャンセル')]
]
window = sg.Window('エンターキーを押してOKをクリックさせたい', layout,return_keyboard_events=True)
#window = sg.Window('エンターキーを押してOKをクリックさせたい', layout)
while True:
event, values = window.read()
code_event=ord(event[0])
value_input=values["Input"]
print(event,code_event,value_input)
#print(f"event='{event}', code={ord(event[0])}, values={values}\n")
if event == sg.WIN_CLOSED or event == 'キャンセル' or code_event == 69: #ESCのcodeはWindows/macOSともに69
#if event == sg.WIN_CLOSED or event == 'キャンセル' or event == 'Escape:27':
break
if event == "OK" or code_event == 13: #Enterのcodeはwindowsでは13、macOSでは82
#if event == "OK" or event == '\r' or event == 'Input':
#print(f"event='{event}', code={ord(event[0])}, values={values}\n")
#print(f"values={values}")
break
window.close()
ーーーーーーーーーーーーーーーーーーーーーーーーー
●出力結果例(macOS Taho26.5.1での結果
ーーーーーーーーーーーーーーーーーーーーーーーーー
a 97 a
b 98 ab
1 49 ab1
Return:603979789 82 ab1
ab1
Escape:889192475 69 ab1
sg.Inputにもイベントを発生させ、文字入力される都度にコードを判別した。
このとき、
・a、b、1などは文字列として辞書のvalueに加わる。
・RETURN(Enter)キーのコードは13(Windows11)、82(macOS)
・escapeキーのコードは69(Win/macとも同じ)
・BackSpaceのコードは66(Windows11)
・Tabのコードは9(Windows11)
↑これでEnterキーが押されるまでの文字列を値として取得して次の処理へ移行、escapeが押されたら入力キャンセルという動作ができる。
以上