我想总结 QTableWidget 中的整个列
I want to sum up an entire column in a QTableWidget
我正在 PyQt5 中创建一个电子表格,我正在尝试添加数学功能。有没有办法通过调用列 Horizontal 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()
我正在 PyQt5 中创建一个电子表格,我正在尝试添加数学功能。有没有办法通过调用列 Horizontal 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()