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

如何在Dearpygui中通过下拉框字符串获取对应整数列表值?

解决Dearpygui下拉框对应值获取问题

首先,你的核心问题是回调函数的参数签名错误:Dearpygui中按钮的回调函数默认接收三个参数:sender(触发回调的控件ID)、app_data(控件的关联数据,按钮点击时为None)、user_data(你传入的自定义数据)。你只定义了两个参数,导致拿到的data是app_data而非user_data。

另外,你提到用.index()方法的思路是可行的,但需要先正确拿到user_data,再通过选中的字母找到对应索引,进而获取listB的值。下面给出两种可行的解决方式:

方案一:修正回调参数+索引映射

直接调整回调函数的参数,正确接收user_data,再通过索引匹配值:

import dearpygui.dearpygui as dpg

dpg.create_context()

listA = ["a", "b", "c"]
listB = [2, 5, 8]

# 修正参数:添加user_data参数
def getvalues(sender, app_data, user_data):
    letter = dpg.get_value("char")
    print(f"Sender: {sender}")
    print(f"Letter: {letter}")
    print(f"User Data: {user_data}")
    
    # 通过选中的字母获取索引,再取对应listB的值
    if letter in listA:
        idx = listA.index(letter)
        corresponding_value = user_data[idx]
        print(f"对应的值:{corresponding_value}")
    else:
        print("未选中有效选项")

with dpg.window():
    dpg.add_combo(label="letters", tag="char", items=listA)
    dpg.add_button(label="Get", callback=getvalues, user_data=listB)

dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

方案二:使用字典映射(更直观)

把listA和listB整合成字典,直接通过选中的字母取值,避免索引操作:

import dearpygui.dearpygui as dpg

dpg.create_context()

# 直接用字典存储字母和对应值的映射
letter_value_map = {"a":2, "b":5, "c":8}

def getvalues(sender, app_data, user_data):
    letter = dpg.get_value("char")
    print(f"Sender: {sender}")
    print(f"Letter: {letter}")
    
    # 直接通过字典取值
    if letter in user_data:
        corresponding_value = user_data[letter]
        print(f"对应的值:{corresponding_value}")
    else:
        print("未选中有效选项")

with dpg.window():
    # 下拉框的items取字典的键
    dpg.add_combo(label="letters", tag="char", items=list(letter_value_map.keys()))
    # 把字典作为user_data传入
    dpg.add_button(label="Get", callback=getvalues, user_data=letter_value_map)

dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

两种方案都能解决你的问题,方案二更适合后续扩展(比如添加更多选项时,不需要维护两个分离的列表)。

内容的提问来源于stack exchange,提问作者Neil M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:37:35