我想总结 QTableWidget 中的整个列

I want to sum up an entire column in a QTableWidget

我正在 PyQt5 中创建一个电子表格,我正在尝试添加数学功能。有没有办法通过调用列 Horizo​​ntal Header 标签或列号来汇总整个列的内容?

比如下面这个QTableWidget中'Gas'列的内容如何总结?

您必须使用在 QTableWidgetItem 更改时发出的 itemChanged。

import random
import sys

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
    QApplication,
    QMainWindow,
    QSpinBox,
    QStyledItemDelegate,
    QTableWidget,
    QTableWidgetItem,
)

COLUMN = 2


class Delegate(QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        return QSpinBox(parent=parent, minimum=0, maximum=1000)


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.table = QTableWidget(10, 10)
        self.table.itemChanged.connect(self.handle_item_changed)
        delegate = Delegate(self.table)
        self.table.setItemDelegateForColumn(COLUMN, delegate)
        self.table.setHorizontalHeaderItem(COLUMN, QTableWidgetItem("Gas"))

        for i in range(5):
            value = random.randint(3, 10)
            item = QTableWidgetItem()
            item.setData(Qt.DisplayRole, value)
            self.table.setItem(i, COLUMN, item)

        self.setCentralWidget(self.table)

    def handle_item_changed(self, item):
        if item.column() == COLUMN:
            r = 0
            for i in range(self.table.rowCount()):
                item = self.table.item(i, COLUMN)
                if item:
                    value = item.data(Qt.DisplayRole)
                    if isinstance(value, int):
                        r += value
            print(f"sum = {r}")


def main():
    app = QApplication(sys.argv)
    view = MainWindow()
    view.resize(640, 480)
    view.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()