如何创建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
相关产品推荐
相关产品推荐

