PySimpleGUIのボタンをエンターで押して実行したい
Q&A
Closed
解決したいこと
PySimpleGUIでプログラムを作っています。
エンターキーを押すと、OKボタンが押されるようにしたいのですが、解決方法が分かりません。
それなりに調べたのですが、これといった情報はありませんでした。
どなたかわかる方、回答お願い致します。
エラーメッセージ
AttributeError: 'Input' object has no attribute 'Click'
ソースコード
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)
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == 'キャンセル':
break
if event == "OK":
print(values[0])
window.close()
実行結果
自分で試したこと
調べていると、こちらのサイトを発見しました。
このサイトの解答にあったソースコードをコピーして実行してみると、見事にエンターキーでボタンがクリックできました。
コピーしたソースコード
import PySimpleGUI as sg
layout = [ [sg.Text('Button Test')],
[sg.Button('Button 1', key='_1_')],
[sg.Button('Button 2', key='_2_')],
[sg.Button('Button 3', key='_3_')], ]
window = sg.Window('My new window', layout,
return_keyboard_events=True)
while True: # Event Loop
event, values = window.Read()
if event is None:
break
if event == '\r':
elem = window.FindElementWithFocus()
if elem is not None:
elem.Click()
elif event == '_1_':
print('Button 1 clicked')
elif event == '_2_':
print('Button 2 clicked')
elif event == '_3_':
print('Button 3 clicked')
しかし、そこにインプットボックスを追加して、フォーカス(クリック)するとエラーが出ました。
今気が付いたのですが、どうやらTabキーでフォーカスを変更することができるようです。
OKボタンよりインプットボックスが先にあるので、最初にインプットボックスがフォーカスされてしまっているようです。
PyAutoGUIでTabキーを押してみてもいいかもしれませんが、もっと簡単な方法があるかと思い質問しました。