PyQt5 - 对齐QTableWidgetItem会导致项目为None

时间:2017-11-07 21:53:31

标签: python pyqt pyqt5 qtablewidget qtablewidgetitem

我在PyQt5中创建了一个表,并填充它与this post中的表格类似。我想对齐所有单元格,但是当我尝试对齐每个单元格时,我的QTableWidgetItem变为None。

根据docs setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter)应该有效。另见here

这是一个工作示例,其中self.db_table是QTableWidget。

for row in rows:
    inx = rows.index(row)
    self.db_table.insertRow(inx)
    self.db_table.setItem(inx, 0, QTableWidgetItem(str(row[0])))
    self.db_table.setItem(inx, 1, QTableWidgetItem(str(row[1])))
    self.db_table.setItem(inx, 2, QTableWidgetItem(str(row[2])))
    self.db_table.setItem(inx, 3, QTableWidgetItem(str(row[3])))
    self.db_table.setItem(inx, 4, QTableWidgetItem(str(row[4])))

当我添加setTextAlignment()时,它会使所有QTableWidgetItems无:

for row in rows:
    inx = rows.index(row)
    self.db_table.insertRow(inx)
    self.db_table.setItem(inx, 0, QTableWidgetItem(str(row[0])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))
    self.db_table.setItem(inx, 1, QTableWidgetItem(str(row[1])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))
    self.db_table.setItem(inx, 2, QTableWidgetItem(str(row[2])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))
    self.db_table.setItem(inx, 3, QTableWidgetItem(str(row[3])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))
    self.db_table.setItem(inx, 4, QTableWidgetItem(str(row[4])).setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter))

这有什么理由不起作用吗?

1 个答案:

答案 0 :(得分:1)

setTextAlignment()方法不返回任何参数且等于None,然后您将None传递给setItem,您必须做的是将项目创建为item = QTableWidgetItem({})然后使用item.setTextAlignment({})并在最后为每个元素添加self.db_table.setItem(inx, 0, item),缩小形式如下:

for row in rows:
    inx = rows.index(row)
    self.db_table.insertRow(inx)
    for i in range(5):
        item = QTableWidgetItem(str(row[i]))
        item.setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter)
        self.db_table.setItem(inx, i, item)