【问题标题】:Aligning a QTableWidgetItem causes item to be None对齐 QTableWidgetItem 会导致项目为无
【发布时间】:2018-04-20 10:52:09
【问题描述】:

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

根据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))

这有什么不工作的原因吗?

【问题讨论】:

    标签: python pyqt pyqt5 qtablewidget qtablewidgetitem


    【解决方案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, 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)
    

    【讨论】:

    • 是一个很好的解决方案,它对我帮助很大,感谢@eyllanesc。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2015-09-30
    • 2021-03-03
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多