Как узнать, к какому QTableWidget принадлежит QPushbutton?

У меня два 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, обе кнопки QPushButton подключены к одной и той же функции.

Как я могу узнать, принадлежит ли кнопка таблице A или таблице B при нажатии на нее?


person Chris Aung    schedule 17.06.2014    source источник


Ответы (2)


Как говорит Матиас Кути, вы можете использовать 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, и кнопки являются дочерними по отношению к другому объекту, просто сохраните ссылку на таблицу в общем родительском элементе под известным именем (например, «таблица»), а затем выполните доступ, например:

 button.parent().table
person Trilarion    schedule 17.06.2014
comment
Я не унаследовал от QTableWidget. Вместо этого и QTableWidget, и QPushButton создаются внутри класса, унаследованного от QDialog. хотя спасибо за вашу помощь - person Chris Aung; 17.06.2014
comment
@Chris Но тогда вы можете сохранить таблицу в родительском с известным именем и лишь немного скорректировать код. Смотрите редактирование. - person Trilarion; 17.06.2014

Если отношение «родитель-потомок» между кнопкой и виджетом таблицы установлено правильно (скорее всего, так и есть), вы можете использовать метод parent() QPushButton для доступа к QTableWidgetItem и использовать ту же функцию в элементе для доступа к QTableWidget.

person Mátyás Kuti    schedule 17.06.2014
comment
Я пробовал self.sender().parent() == QTableWidget, но результат выглядит как False, хотя я нажимаю кнопку внутри того же QTableWidget - person Chris Aung; 17.06.2014