基于标题字符串和所选行获取单元格值

问题描述 投票:3回答:2

例如,我有一个PyQt QTableWidget,它具有3列和2行。列标题分别标记为A,B和C。

A B C
1 2 3
4 5 6

这是我当前来源的摘录:

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

我的代码有效,当我在表中选择一行时。我从选择中获得正确的行号和列号。

给定指定的标头名称,返回所选行的单元格值需要什么代码?如果我选择第2行的单元格1 ...如何获取同一行中C列的单元格值?

python pyqt qtablewidget
2个回答
13
投票

如果执行此操作,则会得到:“分配前已引用局部变量'matchcol'”

要解决的问题,您应该在if循环中返回单元格:

#===================================================================
# 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(0,headercount,1):
        headertext = widget.horizontalHeaderItem(x).text()
        if columnname == headertext:
            cell = widget.item(row, x).text()   # get cell at row, col
            return cell

2
投票

一旦有了单元格的行和列,就可以使用QTableWidget.item获取QTableWidgetItem,从中可以获取text和/或存储的data

因此,在您的插槽中,如果有行和列,您可以看到此列对应的字母,并从那里确定您要从哪一列获取数据。

© www.soinside.com 2019 - 2024. All rights reserved.