如何知道QPushButton属于哪个QTableWidget?

2 投票
2 回答
3487 浏览
提问于 2025-04-18 10:02

我有两个 QTableWidgetItems,每个里面都有多个设置为单元格小部件的 QPushButtons

现在,对于一个 QTableWidget,我使用 self.sender() 来找出被按下的按钮所在的行和列:

button = self.sender()
index = self.Table.indexAt(button.pos())
currentRow = index.row()
mydata = str(self.Table.item(currentRow, 2).text())

不过,我想把两个表格的 QPushButtons 连接到同一个函数上。也就是说,如果我有表格 A 和表格 B,它们的按钮都连接到同一个函数。

那么,当按钮被点击时,我该如何知道这个按钮是属于表格 A 还是表格 B 呢?

2 个回答

1

如果按钮和表格控件之间的父子关系设置得当(大概率是这样),你可以使用QPushButton的parent()方法来获取QTableWidgetItem,然后再对这个项目使用相同的方法来获取QTableWidget。

4

正如Matyas Kuti所说,你可以使用parent。我做了一个示例。

from PySide import QtGui

class MyTableWidget(QtGui.QTableWidget):

    def __init__(self):
        super().__init__(None)
        button = QtGui.QPushButton('Click me', self)
        button.clicked.connect(self.buttonClicked)
        self.setCellWidget(2, 1, button)

    def buttonClicked(self):
        button = self.sender()
        print(button.parent() is self)


app = QtGui.QApplication([])
table = MyTableWidget()
table.show()
app.exec_()

当点击按钮时,输出结果是True。这个例子是用Python 3.X和PySide写的,但应该适用于所有的Python和PyQt。


补充说明:如果你没有直接从QTableWidget继承,而是QTableWidget和按钮都是另一个对象的子对象,那么你只需在共同的父对象中用一个已知的名字(比如“table”)存储对表格的引用,然后可以这样访问:

 button.parent().table

撰写回答