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
相关产品推荐
相关产品推荐

