如何在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.
相关产品推荐
相关产品推荐

