【问题标题】:Cannot populate QTableWidget using .setItem(row, colum, QTableWidgetItem(data))无法使用 .setItem(row, colum, QTableWidgetItem(data)) 填充 QTableWidget
【发布时间】:2021-10-28 18:19:04
【问题描述】:

我想测试 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_())

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

【问题讨论】:

    标签: python pyqt qtablewidget qtablewidgetitem


    【解决方案1】:

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

    【讨论】:

    • 您提到的两种方法都适用于这个简单的示例,但在我的真实应用程序中仍然没有。我一定在其他地方犯了错误。谢谢
    • @Alazeth 我只解决您在帖子中提出的问题,real app 的问题与 SO 无关。我还建议您通过tour 以便您知道如果有人解决了您的问题该怎么办。
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2021-06-09
    • 2018-08-02
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多