Существует ряд подходов, которые могли бы решить эту проблему. Некоторые из них могут включать расположение курсора, а другие могут попасть в таблицы событий и сигналов. Проблема с использованием QCursor для решения этой проблемы заключается в том, что кто-то запускает кнопку с клавиатурой, а не щелчком мыши, что означает, что позиция курсора может не соответствовать правильной строке.
Поскольку вы уже используете высокий уровень QTableWidget
, то здесь это действительно простой способ сделать это:
from functools import partial
class Table(QtGui.QWidget):
def __init__(self):
super(Table, self).__init__()
self.table = QtGui.QTableWidget(3, 2, self)
for row in xrange(3):
item = QtGui.QTableWidgetItem("Item %d" % row)
self.table.setItem(row, 0, item)
button = QtGui.QPushButton("X", self.table)
self.table.setCellWidget(row, 1, button)
button.clicked.connect(partial(self._buttonItemClicked, item))
layout = QtGui.QHBoxLayout(self)
layout.addWidget(self.table)
def _buttonItemClicked(self, item):
print "Button clicked at row", item.row()
В этом примере мы просто выпекаем элемент первого столбца в вызванный щелчком обратный вызов, поэтому, когда вы щелкните их, у них есть ссылка для запроса номера строки. Этот подход будет отличаться для модели / представления более низкого уровня.