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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:20:24