ASarkar
ASarkar

Reputation: 519

Qt: QFormLayout - How to find the row from the button

How to find the row number of QFormLayout() from a button which is in that row? I have a delete button on each row of the form. Such that if I click the delete button, that specific row will get deleted. For this, I am planning to use the command QtWidgets.QFormLayout.removeRow(row) command. I have defined the QFormLayout() within my def __init__(self): function like so.

self.attachForm = QFormLayout()

I also have an Add button which calls the self.attachBtn_clicked(self) function given below. So every time the Add button is clicked a new row is added. Any help will be appreciated.

def attachBtn_clicked(self):
    hbox = QHBoxLayout()
    self.attachForm.addRow('',hbox)

    browseBtn = QPushButton("Open")
    hbox.addWidget(browseBtn)

    addAttachEdit = QLineEdit()
    hbox.addWidget(addAttachEdit)

    delAttachBtn = QPushButton("x")
    delAttachBtn.setFixedSize(15,15)
    delAttachBtn.clicked.connect(self.delAttachBtn_clicked)
    hbox.addWidget(delAttachBtn)

The objective is now to write the self.delAttachBtn_clicked(self) function which will delete the specific row.

Upvotes: 0

Views: 1363

Answers (1)

alec
alec

Reputation: 6112

You can iterate through the rows and find the button that matches the sender.

def delAttachBtn_clicked(self):
    for i in range(self.attachForm.rowCount()):
        if self.sender() == self.attachForm.itemAt(i, QFormLayout.FieldRole).itemAt(2).widget():
            self.attachForm.removeRow(i)
            return

itemAt(2) is used since delAttachBtn is the 3rd item in each QHBoxLayout.

Upvotes: 1

Related Questions