使用行范围从数组填充wxGrid时遇参数类型错误的技术求助
解决wxGrid填充SQLite查询结果的类型错误问题
嘿,我一眼就瞅出问题所在啦!你遇到的'overload 1: argument 1 has unexpected type 'list...'错误,核心原因是把整个行号列表row_num传给了SetCellValue的第一个参数,而这个方法需要的是单个的整数行号,不是列表类型。
错误代码的问题点
你这段代码里:
for row in tbl: cells = row[0:2] for i in range(len(cells)): self.mygrid.SetCellValue(row_num, i, str(cells[i]))
row_num是range(rowNum)生成的列表(比如[0,1,2]),但SetCellValue的第一个参数要求是单个整数行号,类型不匹配自然就报错了。
两种修正方案
方案1:用enumerate自动获取行/列索引(推荐)
这是最简洁不容易出错的方式,enumerate会同时返回元素的索引和值,直接对应网格的行号和列号:
rowNum = 3 # 来自‘select count’查询 tbl = [('apple', 'fruit'), ('bacon', 'meat'), ('rose', 'flower')] # 来自另一查询 # 先确保网格的行数列数正确(提前创建对应数量的单元格) self.mygrid.CreateGrid(rowNum, 2) # 2是你的数据列数,按需调整 # 遍历数据同时获取行号 for row_idx, row in enumerate(tbl): # 遍历每行的单元格同时获取列号 for col_idx, cell_value in enumerate(row): self.mygrid.SetCellValue(row_idx, col_idx, str(cell_value))
方案2:用zip配对行号和数据行
如果你想保留原来生成row_num的逻辑,可以用zip把行号列表和数据行一一配对,每次循环拿到单个行号:
rowNum = 3 # 来自‘select count’查询 row_num = range(rowNum) # 生成[0, 1, 2] tbl = [('apple', 'fruit'), ('bacon', 'meat'), ('rose', 'flower')] # 来自另一查询 # 提前创建网格结构 self.mygrid.CreateGrid(rowNum, 2) # 把行号和数据行配对遍历 for row_idx, row in zip(row_num, tbl): cells = row[0:2] for i in range(len(cells)): self.mygrid.SetCellValue(row_idx, i, str(cells[i]))
额外提醒
填充数据前一定要用CreateGrid或者AppendRows/AppendCols确保网格有足够的行和列,不然即使参数类型正确,也可能出现越界错误哦~
内容的提问来源于stack exchange,提问作者Cathy_Hanna
相关产品推荐
相关产品推荐

