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

使用setItem向QTableWidget添加嵌套字典数据无显示如何解决

问题原因

你的代码存在4个核心错误导致无法正确填充数据:

  • 遍历字典方式错误:直接enumerate(dict_of_instruments)只能拿到外层字典的键(如"GHI"、"DNI"),无法拿到对应的内层属性字典,需要调用.items()方法同时获取键和值
  • 行索引逻辑错误:QTableWidget的行/列索引从0开始计数,你在插入前就将row_count+1,会跳过第一行,且初始行数计算逻辑完全错误:外层字典的每个键对应1行,行数应该等于len(dict_of_instruments),而非累加内层字典的长度
  • 列填充逻辑错误:内层循环遍历的是外层键的单个字符,且所有内容都插在第0列,没有和4列的结构对应
  • 单元格对象传递正确,但插入位置完全错位,因此看不到内容

修正后的完整代码

def populate_table_instruments_measurements(self, source="custom"):
    # 可按需自定义表头
    headers = ["参数类型", "生产商", "设备类型", "等级"]
    # 行数等于外层字典的键数量,列数固定为4
    row_count = len(dict_of_instruments)
    column_count = 4
    
    # 初始化表格参数
    self.table_instruments_measurements.setRowCount(row_count)
    self.table_instruments_measurements.setColumnCount(column_count)
    self.table_instruments_measurements.setHorizontalHeaderLabels(headers)
    
    # 遍历外层字典,同时获取参数名和对应的属性字典
    attr_keys = ["manufacturer", "instrument", "class"]
    for row_idx, (param_name, attr_dict) in enumerate(dict_of_instruments.items()):
        # 第0列填充外层参数名
        self.table_instruments_measurements.setItem(row_idx, 0, QtWidgets.QTableWidgetItem(param_name))
        # 第1-3列依次填充内层属性
        for col_idx, key in enumerate(attr_keys, start=1):
            self.table_instruments_measurements.setItem(row_idx, col_idx, QtWidgets.QTableWidgetItem(attr_dict[key]))

内容的提问来源于stack exchange,提问作者CuriousBoy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:51:02