Python PySimpleGUI在按下按钮时调用函数

Python PySimpleGUI在按下按钮时调用函数,python,pysimplegui,Python,Pysimplegui,当我按下提交按钮时,如何调用函数?或任何其他按钮?PySimpleGUI文档在事件/回调部分讨论了如何执行此操作 其他pythongui框架不使用回调来发出按钮按下的信号。相反,所有按钮的按下都会作为读取调用返回的“事件”返回 为了获得类似的结果,您需要检查事件并自行调用函数 import PySimpleGUI as sg import os layout = [[sg.Text('Velg mappe som skal tas backup av og hvor du vil p

当我按下提交按钮时,如何调用函数?或任何其他按钮?

PySimpleGUI文档在事件/回调部分讨论了如何执行此操作

其他pythongui框架不使用回调来发出按钮按下的信号。相反,所有按钮的按下都会作为读取调用返回的“事件”返回

为了获得类似的结果,您需要检查事件并自行调用函数

import PySimpleGUI as sg
import os

    layout = [[sg.Text('Velg mappe som skal tas backup av og hvor du vil plassere backupen')],
              [sg.Text('Source folder', size=(15, 1)), sg.InputText(), sg.FolderBrowse()],
              [sg.Text('Backup destination ', size=(15, 1)), sg.InputText(), sg.FolderBrowse()],
              [sg.Text('Made by Henrik og Thomas™')],
              [sg.Submit(), sg.Cancel()]]
    window = sg.Window('Backup Runner v2.1')

    event, values = window.Layout(layout).Read()
要查看此代码联机运行,您可以在此处使用web版本运行它:

2019年4月5日增补 我还应该在我的回答中说明,您可以在调用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()
[编辑2020年11月]-可调用密钥

这不是新功能,只是在之前的回答中没有提到

您可以将键设置为函数,然后在生成事件时调用它们。下面是一个示例,它使用了几种方法来实现这一点

将PySimpleGUI导入为sg
def func(message='Default message'):
打印(信息)
布局=[[sg.按钮('1',键=lambda:func('Button 1 pressed')),
sg.按钮('2',键=函数),
sg.按钮(“3”),
sg.Exit()]]
窗口=sg.window('窗口标题',布局)
为True时:#事件循环
事件,值=window.read()
如果事件处于(无,'退出'):
打破
如果可调用(事件):
事件()
elif事件==“3”:
func(“按下按钮3”)
window.close()

我刚刚在我的答案中添加了一条,即您不必添加事件循环。您可以将“if”语句放在最后一行代码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')