对齐 QTableWidgetItem 会导致 item 为 None

N.Z*_*ano 1 python pyqt qtablewidget qtablewidgetitem pyqt5

我在 PyQt5 中创建了一个表并填充它,类似于它在这篇文章中的完成方式。我想居中对齐所有单元格,但是当我尝试对齐每个单元格时,我的 QTableWidgetItem 变为无。

根据文档 setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter)应该可以工作。见这里

这是一个工作示例,其中 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])))
Run Code Online (Sandbox Code Playgroud)

当我添加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))
Run Code Online (Sandbox Code Playgroud)

这有什么原因不起作用吗?

eyl*_*esc 5

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, v in zip(range(5), row):
        item = QTableWidgetItem(str(v))
        item.setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter)
        self.db_table.setItem(inx, i, item)
Run Code Online (Sandbox Code Playgroud)