Документация PySimpleGUI обсуждает, как это сделать, в разделе о событиях / обратных вызовах.
https://pysimplegui.readthedocs.io/#the-event-loop-callback-functions
Это не так уж много других структур Python GUI, которые используют обратные вызовы для сигнализации нажатия кнопок. Вместо этого все нажатия кнопок возвращаются как «события», возвращаемые из вызова Read.
Для достижения аналогичного результата вы проверяете событие и сами вызываете функцию.
import PySimpleGUI as sg
def func(message):
print(message)
layout = [[sg.Button('1'), sg.Button('2'), sg.Exit()] ]
window = sg.Window('ORIGINAL').Layout(layout)
while True: # Event Loop
event, values = window.Read()
if event in (None, 'Exit'):
break
if event == '1':
func('Pressed button 1')
elif event == '2':
func('Pressed button 2')
window.Close()
Чтобы увидеть, как этот код запускается онлайн, вы можете запустить его здесь, используя веб-версию:
https://repl.it/@PySimpleGUI/Call-Func-When-Button-Pressed
Добавлено 05.04.2009
Я должен был также указать в своем ответе, что вы можете добавить проверки событий сразу после вашего звонка в Read. Вам не нужно использовать цикл событий, как я показал. Это может выглядеть так:
event, values = window.Layout(layout).Read() # from OP's existing code
if event == '1':
func('Pressed button 1')
elif event == '2':
func('Pressed button 2')