pyqt5 как кнопка удаляет строку в QTableWidget, где она находится - PullRequest
0 голосов
/ 23 января 2019

так что в основном у меня есть кнопка удаления для каждой строки в QTableWidget для события click.

как мне найти индекс строки той конкретной кнопки, на которую нажимают?

class WidgetGallery(QDialog):
    def __init__(self, parent=None):
        super(WidgetGallery, self).__init__(parent)
        self.table = QTableWidget(10, 3)
        col_1 = QTableWidgetItem("first_col")
        col_2 = QTableWidgetItem("second_col")
        deleteButton = QPushButton("delete_this_row")
        deleteButton.clicked.connect(self.deleteClicked)
        self.table.setItem(0, 0, col_1)
        self.table.setItem(0, 1, col_2)
        self.table.setCellWidget(0, 2, deleteButton)
        self.mainLayout = QGridLayout()
        self.mainLayout.addWidget(self.table)


    def deleteClicked(self):
        sender = self.sender()
        row = sender.parent().........?

1 Ответ

0 голосов
/ 23 января 2019

Исходя из ваших комментариев, вы используете мой предыдущий ответ в качестве основы, но, как вы указываете, они терпят неудачу, потому что контекст предыдущего вопроса отличается от вашего текущего кода, в предыдущем случаеявляется родительским виджетом, где установлена ​​кнопка, и этот виджет только что установлен в QTableWidget.В этом случае оно должно быть прямым:

from PyQt5 import QtCore, QtGui, QtWidgets

class WidgetGallery(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(WidgetGallery, self).__init__(parent)
        self.table = QtWidgets.QTableWidget(10, 3)
        col_1 = QtWidgets.QTableWidgetItem("first_col")
        col_2 =QtWidgets.QTableWidgetItem("second_col")
        deleteButton = QtWidgets.QPushButton("delete_this_row")
        deleteButton.clicked.connect(self.deleteClicked)
        self.table.setItem(0, 0, col_1)
        self.table.setItem(0, 1, col_2)
        self.table.setCellWidget(0, 2, deleteButton)
        self.mainLayout = QtWidgets.QGridLayout(self)
        self.mainLayout.addWidget(self.table)

    @QtCore.pyqtSlot()
    def deleteClicked(self):
        button = self.sender()
        if button:
            row = self.table.indexAt(button.pos()).row()
            self.table.removeRow(row)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = WidgetGallery()
    w.show()
    sys.exit(app.exec_())
...