如何找出QPushWidget属于哪个QTableWidget?

时间:2014-06-17 06:38:14

标签: python qt pyqt pyqt4 qtablewidget

我有两个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都将QPushButtons连接到同一个函数。

如何在点击按钮时知道某个按钮属于表A还是表B?

2 个答案:

答案 0 :(得分:2)

正如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中,但也应该适用于所有Pythons和PyQt。


编辑:如果您没有直接从QTableWidget继承,但QTableWidget和按钮都是另一个对象的子项,只需在公共父级下以已知名称存储对该表的引用(例如" table")然后访问如下:

 button.parent().table

答案 1 :(得分:1)

如果在按钮和表格小部件之间正确设置了父子关系(很可能是这样),您可以使用QPushButton的parent()方法访问QTableWidgetItem并在项目上使用相同的功能来访问QTableWidget。