Search code examples
pythonpyqtqtablewidget

get cell value based on header string and selected row


For example, I have a PyQt QTableWidget which has 3 columns and 2 rows. The column headers are labeled A, B, and C.

A B C
1 2 3
4 5 6

This is the excerpt from my current source:

class myform(QtGui.QMainWindow):

    def __init__(self, parent=None):

        super(myform, self).__init__(parent)

        self.ui = Ui_mygui()
        self.ui.setupUi(self)

        self.ui.mytablewidget.cellClicked.connect(self.cell_was_clicked)

    @QtCore.pyqtSlot() # prevents executing following function twice
    def cell_was_clicked(self):
        row = self.ui.mytablewidget.currentItem().row()
        print "row=",row
        col = self.ui.mytablewidget.currentItem().column()
        print "col=",col
        item = self.ui.mytablewidget.horizontalHeaderItem(col).text()
        print "item=",item

My code works and when I select a row in my table.. I get the correct row and col numbers from the selection.

What is the code needed to return a cell value for the selected row given a specified header name? If I select row 2 cell 1 ... how can I get the cell value of column C on the same row?


Solution

  • If you do that you got: "local variable 'matchcol' referenced before assignment"

    To fix that you should return the cell inside if loop:

    #===================================================================
    # given a tablewidget which has a selected row...
    # return the column value in the same row which corresponds to a given column name
    # fyi: columnname is case sensitive
    #===================================================================
    
    def getsamerowcell(widget,columnname):
    
        row = widget.currentItem().row()
        # col = widget.currentItem().column()
    
        # loop through headers and find column number for given column name
        headercount = widget.columnCount()
        for x in range(headercount):
            headertext = widget.horizontalHeaderItem(x).text()
            if columnname == headertext:
                cell = widget.item(row, x).text()  # get cell at row, col
                return cell