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

PySimpleGUI表单输入值插入数据库异常:传入键而非实际值求助

问题解决:PySimpleGUI表单输入值无法插入数据库,总是插入Key字符串

你当前的问题核心是直接传入了Key字符串而非输入框的实际内容。在event == '-INSERT-'的分支里,你把'-DESC-'、'-KCal-'这两个字符串直接传给了插入函数,数据库自然会插入这些字符串。

修正方法

要获取输入框的实际内容,有两种常用方式:

方式1:利用window.read()返回的values字典

window.read()会返回两个值:event(触发的事件)和values(存储所有输入组件内容的字典,key为你定义的组件Key)。直接通过values[key]就能拿到对应输入值:

elif event == '-INSERT-':
    # 从values字典中获取输入内容
    desc = values['-DESC-']
    kcal = values['-KCal-']
    # 注意:如果KCal字段是数值类型,需要转换类型
    try:
        kcal = float(kcal)  # 或int(kcal),根据数据库字段类型调整
    except ValueError:
        print("请输入有效的卡路里数值")
        continue
    insert.insert_record_Food(desc, kcal)

方式2:通过窗口对象直接获取组件值

如果能拿到窗口对象的引用,也可以用window[key].get()获取输入内容:

elif event == '-INSERT-':
    desc = window['-DESC-'].get()
    kcal = window['-KCal-'].get()
    # 同样建议做类型转换
    try:
        kcal = float(kcal)
    except ValueError:
        print("卡路里输入无效")
        continue
    insert.insert_record_Food(desc, kcal)

补充说明

  • 确保你的主循环中正确接收了values参数,比如主循环结构应该是:
    window = sg.Window("Records", layout, size=(900,300), finalize=True)
    while True:
        event, values = window.read()  # 这里必须接收values
        if event == sg.WIN_CLOSED or event == '-BACK-':
            break
        # 处理INSERT事件...
    window.close()
    
  • 若数据库的KCal字段是数值类型(INT/FLOAT),一定要把输入的字符串转换为对应数值类型,否则会插入失败或存储错误数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:20:50