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

Python Combobox选项映射对应数值的SAP脚本问题求助

问题分析与解决方案

核心问题

  1. 你直接把Combobox组件对象ses覆盖成了字符串,后续调用ses.get()会直接报错——因为ses已经不是原来的下拉框实例了。
  2. 那段判断选择的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:25:19