Python pyqt5按钮如何删除它所在的QTableWidget中的行

Python pyqt5按钮如何删除它所在的QTableWidget中的行,python,pyqt,pyqt5,qtablewidget,Python,Pyqt,Pyqt5,Qtablewidget,基本上,我在QTableWidget中的每一行都有一个delete按钮 用于单击事件 如何找到被单击的特定按钮的行索引 class WidgetGallery(QDialog): def __init__(self, parent=None): super(WidgetGallery, self).__init__(parent) self.table = QTableWidget(10, 3) col_1 = QTableWidgetIt

基本上,我在QTableWidget中的每一行都有一个delete按钮 用于单击事件

如何找到被单击的特定按钮的行索引

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().........?

根据您的评论,您正在使用作为基础,但正如您指出的,这些都是失败的,因为前面问题的上下文不同于您当前的代码,在前面的例子中,有一个父小部件在其中设置了按钮,而该小部件只是在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_())

它和C++的版本完全一样,但是看起来C++接口和Python接口有点不同,在PythONI中找不到类似的函数,试图提供一个小例子,在Python中与FaltuTung秀代码进行斗争,可能问题不在编程语言中,但在其实现中最后一行是我遇到的问题,无法从sender.parent中找出行索引,根据indexFromItem接受QTableWidgetItem,但按钮是QWidgetHanks,它像魔术一样工作,但是为什么在这个页面上找不到indexAt函数@cynric4sure我提醒你QTableWidget继承自QTableView,因此它有QTableView类的方法将有QTableWidget,所以可以在文档中找到indexAt:@cynric4sure我推荐阅读Qt的文档,因为它解释了每个方法的用途:,非常感谢,这是否意味着C++中的所有函数在其他语言API中都有镜像函数?看起来只有C++ Qt有一个全面的文档,而Python一个则是最小的。对不起,我是新来的QT@cynric4sure在PyQt之前,它提供了一份Qt文档的副本,但在某一点上它没有,现在它似乎提供了,因为您指向的页面只显示了一个指向Qt的Qt文档的链接。实际上,这些方法之间有99%的兼容性,有些方法没有在PyQt中实现,因此最好阅读Qt的文档,因为它非常具有描述性