首页 > 解决方案 > 无法使用 .setItem(row, colum, QTableWidgetItem(data)) 填充 QTableWidget

问题描述

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

我读过的文档和书都说在 QtableWidget 对象上使用 .setItem(row, colum, QTableWidgetItem(data)) 是一种方法。但是,下面的代码不起作用,我只有一个空表,我不知道为什么。任何想法 ?

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_())

这是我运行代码时窗口的样子

标签: pythonpyqtqtablewidgetqtablewidgetitem

解决方案


如果你想在 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)

推荐阅读