Python Combobox选项映射对应数值的SAP脚本问题求助
问题分析与解决方案
核心问题
- 你直接把Combobox组件对象
ses覆盖成了字符串,后续调用ses.get()会直接报错——因为ses已经不是原来的下拉框实例了。 - 那段判断选择的
if-else代码是在下拉框刚创建时就执行的,这时候用户还没做任何选择,根本拿不到有效的选中值。
修正后的代码
import ttk import win32com.client vlist = ["FGT1", "FGT2", "FGT3", "FGT4", "FGT5","FGT6"] # 用字典做映射,比一堆if-else简洁好维护 fgt_map = { "FGT1": "0", "FGT2": "1", "FGT3": "2", "FGT4": "3", "FGT5": "4", "FGT6": "5" } # 保留下拉框实例,不要覆盖 ses = ttk.Combobox(master, values=vlist, width=25) ses.state(['readonly']) def sap(): # 获取当前用户选中的选项 selected_item = ses.get() # 通过映射字典拿到对应的数字,默认值设为"0"防止未选中的情况 ses_num = fgt_map.get(selected_item, "0") # 拼接成需要的ID字符串 SapGui = win32com.client.GetObject("SAPGUI").GetScriptingEngine session5 = SapGui.FindById(f"ses[{ses_num}]") # 可选:绑定下拉框选择事件,实时获取映射值 def on_select(event): selected = event.widget.get() print(f"当前选择对应数值: {fgt_map.get(selected, '0')}") ses.bind("<<ComboboxSelected>>", on_select)
关键改进点
- 用字典映射替代冗余的条件判断,后续新增选项只需要修改字典即可,不用加新的
elif - 始终保留
ses作为下拉框组件实例,确保能正常调用get()获取用户选择 - 映射逻辑放在
sap()函数内部执行,保证是在用户选择后才获取对应数值
内容的提问来源于stack exchange,提问作者Patrik Fodor
相关产品推荐
相关产品推荐

