如何使用以前的列值自动计算列?

时间:2019-04-10 13:28:54

标签: python python-3.x pyqt pyqt5 qtablewidget

我正在使用python创建一个项目,它可以像excel一样,因此当我在单元格中输入一些数字时,它将自动计算

从上一个问题开始,我再次尝试了一些代码,但是当我尝试使用一些先前的列值自动计算当前列值时,卡住了。

用于计算PGA值的代码(与IKS相同,只是有些不同) ...

def on_itemChanged(自身,项目):

date.timezone='Europe/London'

什么是正确的方法,以便当公式为(IKS * PGA)时我可以获得GSS值? This is the table

1 个答案:

答案 0 :(得分:0)

        # Find indexes of column PGA, IKS and GSS   
        headercount = self.dlg.tableWidget.columnCount()

        for x in range(headercount):
           headertext = self.tableWidget.horizontalHeaderItem(x).text()
           if 'PGA' == headertext:
                self.matchcol_pga = x
           if 'IKS' == headertext:
                self.matchcol_iks = x
           if 'GSS' == headertext:
                self.matchcol_gss = x
        # Set signal and call function on itemChanged 
        self.tableWidget.itemChanged.connect(self.changeResult)

   def changeResult(self, item):
       row = item.row()
       self.dlg.tableWidget.blockSignals(True)
       try:
           pga = self.dlg.tableWidget.item(row, self.matchcol_pga).text()  # get cell at row, col
           iks = self.dlg.tableWidget.item(row, self.matchcol_iks).text()  # get cell at row, col

           gss = int(pga) * int(iks)

           self.dlg.tableWidget.setItem(row, self.matchcol_gss, QTableWidgetItem(str(gss)))
       except:
           pass
       self.dlg.tableWidget.blockSignals(False)
  

注意:使用blockSignals避免-返回错误:RuntimeError:最大值   调用Python对象时超出了递归深度