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

Posted

技术标签:

【中文标题】用给定行的所有单元格值填充字典【英文标题】:Fill a dictionary with all cell values of given row 【发布时间】:2012-09-16 21:16:51 【问题描述】:

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

所以从一张如图所示的表格中, 我们希望在这个例子中以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:10SecondRowDict=0:10,1:10

看来我必须使用QTableWidgetItem http://doc.qt.nokia.com/4.7-snapshot/qtablewidget.html#item 创建一个新项目

Python 初学者,不胜感激。

【问题讨论】:

你得到什么作为输出?顺便说一句,1st_Row_Dict 在 Python 中不是一个有效的名称。 这是我得到的:FirstRowDict=0:10,1:10, SecondRowDict=0:10,1:10 。我编辑了字典名称,因为我刚刚选择了这些名称例子 【参考方案1】:

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

是的,您应该使用item 而不是itemAt

如果您要将 str 转换为浮点数,则不需要它。 float() 将在 QString 上工作,就好像它是 str。而且,您可以将新值分配给键,而不是 .update

FirstRowDict[i] = float(tablewidget.item(0, j).text())

【讨论】:

以上是关于用给定行的所有单元格值填充字典的主要内容,如果未能解决你的问题,请参考以下文章

根据单独的单元格值自动填充单元格字符串值 1

如何使用合并单元格值大于单元格宽度的 Apache-POI 增加 excel 行的高度?

每次活动单元格更改行时更新单元格值

基于单元格值的自动填充线

使用 VBA 进行颜色填充,以单元格值为条件

使用VBA进行颜色填充,有条件地使用单元格值