使用给定行的所有单元格值填充字典

时间:2012-09-16 21:16:51

标签: python pyqt4 cell qtablewidget

用户在QTableWidget的所有单元格中手动设置值。表的第一行的值表示我们要存储在字典FirstRowDict中的值。第二行值将放在SecondRowDict中,依此类推。

enter image description here

所以从图中所示的表中, 我们希望在此示例中以FirstRowDict={0:10,1:20}结束 和SecondRowDict={0:30,1:40}

为了达到这个目的,我创建了一个按钮并添加了一个动作,可以在单击时更新目标词典:

def button_click():
    for j in range(0,2):
        FirstRowDict.update({i: float(str(tablewidget.itemAt(0,j).text()))})

        #I put "0" in itemAt because first row is zero
        #tablewidget = QTableWidget() declared earlier in the source code

        SecondRowDict.update({i: float(str(tablewidget.itemAt(1,j).text()))})

    print '1st_Row_Dict=%s'%1st_Row_Dict,'\n2nd_Row_Dict=%s'%2nd_Row_Dict

输出不正确,因为字典填充的是相同的值,而不是每个单元格的唯一值。 我得到FirstRowDict={0:10,1:10}SecondRowDict={0:10,1:10}

似乎我必须使用QTableWidgetItem http://doc.qt.nokia.com/4.7-snapshot/qtablewidget.html#item

创建一个新项目

Python begginer,一些建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

啊,我看到了混乱。 itemAt返回给定位置的项目,但不是row/column。它是坐标(将其视为像素)。

是的,您应该使用item代替itemAt

如果您要将其转换为浮动,则不需要strfloat() QString可以使用str,就好像它是.update一样。而且,您可以将新值分配给密钥,而不是FirstRowDict[i] = float(tablewidget.item(0, j).text())

{{1}}