You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建PySimpleGUI窗口按钮输入生成、关闭后仍全局可访问的变量

PySimpleGUI 窗口生成变量全局访问实现方案

完全可以实现该需求,以下是两种可直接落地的实现方式:

方案1:全局变量实现(匹配你描述的需求)

在代码顶层声明变量,在子窗口的按钮事件逻辑中添加global关键字声明要修改全局变量,即可保证子窗口关闭后变量值仍然保留,可在主程序任意位置访问。
示例代码:

import PySimpleGUI as sg

# 顶层声明全局变量
global_var = None

# 子窗口定义
def create_sub_window():
    global global_var
    layout = [
        [sg.Input(key='-INPUT-')],
        [sg.Button('确认保存', key='-SAVE-'), sg.Button('关闭')]
    ]
    window = sg.Window('子窗口', layout)
    while True:
        event, values = window.read()
        if event in (sg.WIN_CLOSED, '关闭'):
            break
        if event == '-SAVE-':
            # 给全局变量赋值
            global_var = values['-INPUT-']
            sg.popup('变量已保存')
    window.close()

# 主程序逻辑
if __name__ == '__main__':
    create_sub_window()
    # 子窗口关闭后仍可访问全局变量
    if global_var is not None:
        sg.popup(f'子窗口关闭后读取到的变量值:{global_var}')

方案2:更推荐的返回值实现(避免全局变量污染)

如果不需要强制用全局变量,更建议让子窗口函数直接返回生成的变量,主程序接收后存储使用,逻辑更清晰也不会产生全局变量冲突问题。
示例代码:

import PySimpleGUI as sg

def create_sub_window():
    layout = [
        [sg.Input(key='-INPUT-')],
        [sg.Button('确认保存', key='-SAVE-'), sg.Button('关闭')]
    ]
    window = sg.Window('子窗口', layout)
    res = None
    while True:
        event, values = window.read()
        if event in (sg.WIN_CLOSED, '关闭'):
            break
        if event == '-SAVE-':
            res = values['-INPUT-']
            break
    window.close()
    # 直接返回生成的变量
    return res

if __name__ == '__main__':
    # 主程序接收子窗口返回的变量,可任意位置使用
    user_data = create_sub_window()
    if user_data is not None:
        sg.popup(f'子窗口关闭后读取到的变量值:{user_data}')

注意:如果需要存储多组不同的变量,也可以用顶层定义的字典、类实例来统一存储,不需要单独声明多个全局变量。

内容的提问来源于stack exchange,提问作者Frederic Moustier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:48:03