PySimpleGUI程序启动时自动执行所有功能函数的问题求助
问题排查:PySimpleGUI程序启动自动执行功能函数的原因及修复
问题现象
程序启动阶段会自动执行Contact、Location、Reservdel全部功能函数,完成后才进入正常主界面运行状态。
问题根源
以location.py的代码为例,核心问题是模块顶层代码被自动执行:
location_l函数定义后,后续的布局创建、窗口实例化、事件循环、窗口关闭等代码都写在函数外部,属于模块的顶层代码。- 当主程序通过
from location import location_l as lc导入模块时,Python会自动执行模块内所有顶层代码,直接触发Location功能的窗口创建和事件循环,导致启动时自动运行该功能。 - 同理,
contact.py和MALL_reserv_01.py的代码结构大概率和location.py一致,所以三个功能模块的顶层代码都会在导入时被执行,表现为启动时自动遍历执行所有功能。
另外,location.py里的local_location函数直接引用外部的values变量,属于语法问题,后续执行时会报错。
修复方案
将每个功能模块的所有业务逻辑(布局、窗口、事件循环等)全部封装到对应的函数内部,确保只有当主程序触发菜单事件调用函数时,才会执行功能逻辑。同时修正内部函数的变量作用域问题。
修复后的location.py代码
import PySimpleGUI as sg import segno import helpers # 确保该模块已正确导入 def location_l(): # 定义local_location为内部函数,可直接访问location_l内的变量 def local_location(values): input_lat = float(values['-Latitude-']) input_long = float(values['-Longitude-']) input_location = values['-Location-'] geo_uri = helpers.make_geo_data(input_lat, input_long) qrcode = segno.make(geo_uri, error='H') qrcode.save(f'{input_location.lower()}.png', scale=3, dark='black') # 将布局、窗口创建、事件循环全部放入函数内部 layout = [ [sg.Text('Latitude', background_color='#007FC3', text_color='#F39200', size=(14, 1), font='bold')], [sg.Input(size=(25, 1), key='-Latitude-')], [sg.Text('Longitude', background_color='#007FC3', text_color='#F39200', size=(14, 1), font='bold')], [sg.Input(size=(25, 1), key='-Longitude-')], [sg.Text('Location', background_color='#007FC3', text_color='#F39200', size=(14, 1), font='bold')], [sg.Input(size=(25, 1), key='-Location-')], [sg.Button('Generate Location QR', button_color=('#0E0E11', '#6E7A82'))], ] window = sg.Window('Location QR', layout, margins=(35, 10), background_color='#007FC3') while True: event, values = window.read() if event == sg.WIN_CLOSED: break if event == 'Generate Location QR': local_location(values) window.close()
其他模块的修复要求
对contact.py的contact_l函数、MALL_reserv_01.py的mall_r函数执行相同操作:
- 将所有窗口创建、布局定义、事件循环代码移入对应函数内部
- 修正内部函数的变量作用域问题,避免引用未定义的全局变量
主程序注意点
主程序代码逻辑正确,无需修改。修复后,只有当用户点击菜单中的对应选项时,才会触发对应功能函数的执行。
内容的提问来源于stack exchange,提问作者mikthebug
相关产品推荐
相关产品推荐

