如何在QTableWidget中获得项目的自动总结?

时间:2018-01-07 02:41:24

标签: python pyqt

我试图让我的QTableWidget得到第2列到第9列的项目总和。显然,我可以使用以下代码获取它

self.tableWidget.itemPressed.connect(self.summation)

def summation(self):
   row = self.tableWidget.currentRow()
   table = QtGui.QTableWidgetItem()
   try:
       data = sum([int(item.text()) for item in self.tableWidget.selectedItems()])
       table.setText(str(data))
   except ValueError:
       pass
   self.tableWidget.setItem(row, 10, table)

我希望在项目输入单元格之后获得总和,并且当项目被填充到第2列到第9列的单元格中时,总和会增加,而不需要首先选择要设置总和的项目。

2 个答案:

答案 0 :(得分:0)

class window31(QtWidgets.QMainWindow):
    def __init__(self):
        super(window31,self).__init__()
        self.table=QtWidgets.QTableWidget()
        self.setCentralWidget(self.table)
        self.table.setColumnCount(11)
        self.table.setRowCount(35) #setting initial count
        self.table.setHorizontalHeaderLabels(["col "+str(i) for i in range(5)])
        for i in range(self.table.rowCount()):
            self.table.setItem(i,9,QtWidgets.QTableWidgetItem("0"))
        self.table.itemChanged.connect(self.print_it)
        self.show()
    def print_it(self,no):
        if no.column()==9:
            return
        try:
            col9sum=0
            for column in range(2,9):
                try:
                    col9sum+=int(self.table.item(no.row(),column).text())
                except:
                    pass
                self.table.setItem(no.row(),9,QtWidgets.QTableWidgetItem(str(col9sum)))

        except Exception as E:
            print(E)


app=QtWidgets.QApplication([])
ex=window31()
sys.exit(app.exec_())

#time.sleep(5)

答案 1 :(得分:0)

我在改变列数

后的某个时候解决了这个问题
column = self.tableWidget.columnCount()
col = (column - 1)
row = self.tableWidget3.currentRow()
num = self.tableWidget3.item(row, 1).text()
num2 = self.tableWidget3.item(row, 2).text()
num3 = self.tableWidget3.item(row, 3).text()
num4 = self.tableWidget3.item(row, 4).text()
num5 = self.tableWidget3.item(row, 5).text()
add = int(num) + int(num2) + int(num3) + int(num4) + int(num5)
table = QtGui.QTableWidgetItem()
table.setText(str(add))
self.tableWidget.setItem(row, col, table)