使用Python map函数为QTableWidget设置项无报错却不生效如何解决
问题原因
- Python 3 中
map()属于惰性计算函数,执行后仅返回迭代器对象,不会主动运行内部的lambda逻辑。只有主动遍历迭代器时,内部的函数才会被调用。你当前的代码没有对map()的返回值做任何处理,所有setItem逻辑实际上从未执行,因此不会报错也不会生效。 np.meshgrid()返回的是二维数组,直接将两个二维数组传入map()时,每次迭代传入lambda的是整行的数组元素,而非单个坐标值。就算触发了map执行,传入setItem的参数也不符合要求。
解决方案
方案1:嵌套循环实现(更推荐,逻辑清晰无冗余)
for x in range(5): for y in range(10): self.tab.setItem(x, y, QTableWidgetItem())
方案2:调整后用map()实现
x, y = np.meshgrid(range(5), range(10)) # list() 主动触发迭代器执行,ravel() 将二维数组展平为一维元素序列 list(map(lambda x, y: self.tab.setItem(x, y, QTableWidgetItem()), x.ravel(), y.ravel()))
内容的提问来源于stack exchange,提问作者lelorrain7
相关产品推荐
相关产品推荐

