如何在PyQt5的Combobox中同时显示两个关联值并分别取值使用
实现方案
1. 替换原有下拉框填充逻辑
删除原来两个独立下拉框的填充代码,新增合并下拉框的填充逻辑,将关联的SITECODE和FOLDER组合为显示文本,同时将两个值以元组形式存入下拉框的自定义数据区域,方便选中后直接取用:
job_list = pd.read_csv(filepath_or_buffer="data/job_list.csv", header=0) # 可选:对重复的SITECODE+FOLDER组合去重 job_list = job_list.drop_duplicates(subset=["SITECODE", "FOLDER"]) # 新增空选项 self.comboSiteJob.addItem("", ("", "")) # 遍历CSV每行生成组合选项 for row in job_list.itertuples(): show_text = f"{row.SITECODE} | {row.FOLDER}" # 自定义数据存两个值的元组,顺序为sitecode、folder self.comboSiteJob.addItem(show_text, (row.SITECODE, row.FOLDER)) # 绑定选中触发事件 self.comboSiteJob.currentIndexChanged.connect(self.comboSiteJob_index_changed)
注:上述代码中
comboSiteJob为你新增的合并下拉框对象名,可根据实际命名修改。
2. 替换选中事件处理函数
删除原来两个独立下拉框的事件处理函数,新增合并下拉框的选中处理逻辑,一次取值分别更新两个输入框和全局变量:
def comboSiteJob_index_changed(self, index): global comboSiteCodes_gbl, comboJobs_gbl # 取出存储的元组并解包 sitecode, folder = self.comboSiteJob.itemData(index) # 更新全局变量 comboSiteCodes_gbl = sitecode comboJobs_gbl = folder # 同步更新两个输入框 self.lineEditSiteCode.setText(sitecode) self.lineEditJob.setText(folder)
内容的提问来源于stack exchange,提问作者Spatial Digger
相关产品推荐
相关产品推荐

