Установка обработчика mousePressEvent в QTableWidgetItem

#python #pyside2 #qtablewidget #qtablewidgetitem

#python #pyside2 #qtablewidget #qtablewidgetitem

Вопрос:

У меня есть QTableWidget заполненный несколькими QTableWidgetItem объектами. Я пытаюсь добавить mousePressEvent слушателя к своим QTableWidget объектам.

Мой текущий код прост:

 class TaskCell(QTableWidgetItem):
    def __init__(self, text, parent):
        super().__init__(text)
        self.parent = parent

    def mousePressEvent(self, event):
        print("Mouse clicked on cell with parent"   self.parent.id)
  

Мне это кажется довольно простым, но, к сожалению, не работает. Могу ли я не добавлять a mousePressEvent к QTableWidgetItem объектам? Большое спасибо.

Ответ №1:

QTableWidgetItem — это не визуальный элемент, а информационный контейнер, поэтому у него нет метода, подобного mousePressEvent . Что нужно сделать, это переопределить метод mousePressEvent QTableWidget и получить ячейки задач:

 class TableWidget(QtWidgets.QTableWidget):
    def mousePressEvent(self, event):
        super().mousePressEvent(event)
        item = self.itemAt(event.pos())
        if isinstance(item, TaskCell):
            print("Mouse clicked on cell with parent {}".format(item.parent.id))