无法使用 .setItem(row, colum, QTableWidgetItem(data)) 填充 QTableWidget

Cannot populate QTableWidget using .setItem(row, colum, QTableWidgetItem(data))

我想测试 PyQt 以编写一个快速应用程序以 Excel 形式显示和编辑数据,但数据从未显示。

我读过的文档和书都说在 QtableWidget 对象上使用 .setItem(row, colum, QTableWidgetItem(data)) 是 one路要走。 但是,下面的代码不起作用,我只有一个空的table,我想不通为什么。有什么想法吗?

import sys
from PyQt5.QtWidgets import (
    QApplication,
    QMainWindow,
    QTableWidget,
    QTableWidgetItem,
    QMenu,
    QAction,
    QInputDialog,
)


class SpreadsheetFramework(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setMinimumSize(1000, 500)
        self.setWindowTitle("Spreadsheet Table")
        # Used for copy and paste actions
        self.item_text = None
        self.createTable()
        self.fillTable()
        self.show()

    def createTable(self):
        self.table_widget = QTableWidget()

        self.table_widget.setRowCount(10)
        self.table_widget.setColumnCount(10)

        self.table_widget.setCurrentCell(0, 0)

        self.setCentralWidget(self.table_widget)

    def fillTable(self):
        for i in range(10):
            for j in range(10):
                self.table_widget.setItem(i, j, QTableWidgetItem(i * j))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = SpreadsheetFramework()
    sys.exit(app.exec_())

这就是我 运行 代码

时 window 的样子

如果要在 QTableWidgetItem 中显示数据并通过构造函数传递它,则它必须是字符串。

self.table_widget.setItem(i, j, QTableWidgetItem(str(i * j)))

缺点是不再是数字而是代表数字的字符串

另一个更好的选择是使用 setData 将号码传递给 Qt.DisplayRole 角色。

item = QTableWidgetItem()
item.setData(Qt.DisplayRole, i * j)
self.table_widget.setItem(i, j, item)