Нужно получить данные из ячейки QTableWidget

Для сохранения url в буфер обмена, привязал к таблице контекстное меню. При клике на соответствующий пункт, таблица должна выдавать текст ячейки, который будет ключом для поиска в базе SQL для нахождения url.

Я уже получил индекс и подставил столбец. Но print выдаёт мне результат None.
Что я неправильно сделал чтобы получить текст ячейки?

import sys
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import QFont, QFontDatabase
from PyQt5.QtWidgets import *


class PageTable(QMainWindow):
    def __init__(self):
        super().__init__()

        self.page = QtWidgets.QWidget(self)
        self.setCentralWidget(self.page)

        self.gridLayout = QtWidgets.QGridLayout(self.page)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setSpacing(0)
        self.label_content = QLabel(
            ' ', self, alignment=Qt.AlignCenter)
        self.gridLayout.addWidget(self.label_content, 0, 0)
        self.gridLayout.setRowStretch(0, 1)
        font = self.label_content.font()
        font.setPointSize(20)
        self.label_content.setFont(font)
        self.resize(1000, 600)

        self.manipulation_grid = QtWidgets.QGridLayout(self.label_content)
        self.manipulation_grid.setContentsMargins(15, 15, 15, 15)

# TableWidget
        self.table = QTableWidget()
        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(["Bool", "Индексы"])
        self.table.verticalHeader().setVisible(False)
        self.table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft)
        self.table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter)

        self.manipulation_grid.addWidget(self.table, 0, 0)

# ContentTable
        self.table.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.table.customContextMenuRequested.connect(self.context)
        self.table.resizeColumnsToContents()
        self.table.setRowCount(1)
        self.table.setItem(0, 0, QTableWidgetItem("+"))
        self.table.setItem(0, 1, QTableWidgetItem(
            "Здесь индекс по которому будет производится поиск в базе данных"))
        self.table.resizeColumnsToContents()

    def context(self, point):
        menu = QtWidgets.QMenu()
        if self.table.itemAt(point):
            edit_question = QtWidgets.QAction('Получить URL', menu)
            edit_question.triggered.connect(lambda: print(
                self.table.cellWidget(self.table.itemAt(point).row(), 1))) # Здесь, вероятно, какая-то проблема
            menu.addAction(edit_question)
        else:
            pass
        menu.exec(self.table.mapToGlobal(point))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = PageTable()
    window.show()
    sys.exit(app.exec_())


Ответы (1 шт):

Автор решения: S. Nick

QString QTableWidgetItem::text() const

Возвращает текст элемента.

import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.Qt import *


class PageTable(QMainWindow):
    def __init__(self):
        super().__init__()

        self.page = QtWidgets.QWidget(self)
        self.setCentralWidget(self.page)

        self.gridLayout = QtWidgets.QGridLayout(self.page)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setSpacing(0)
        
        self.label_content = QLabel(
            ' ', self, alignment=Qt.AlignCenter)
        font = self.label_content.font()
        font.setPointSize(20)
        self.label_content.setFont(font)
        
        self.gridLayout.addWidget(self.label_content, 0, 0)
        self.gridLayout.setRowStretch(0, 1)

        self.manipulation_grid = QtWidgets.QGridLayout(self.label_content)
        self.manipulation_grid.setContentsMargins(15, 15, 15, 15)

        # TableWidget
        self.table = QTableWidget()
        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(["Bool", "Индексы"])
        self.table.verticalHeader().setVisible(False)
        self.table.horizontalHeaderItem(0).setTextAlignment(Qt.AlignLeft)
        self.table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignHCenter)
        self.manipulation_grid.addWidget(self.table, 0, 0)

        # ContentTable
        self.table.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        
        self.table.customContextMenuRequested.connect(self.context)
        
        self.table.resizeColumnsToContents()
        self.table.setRowCount(1)
        self.table.setItem(0, 0, QTableWidgetItem("+"))
        self.table.setItem(0, 1, QTableWidgetItem(
            "Здесь индекс по которому будет производится поиск в базе данных"))
        self.table.resizeColumnsToContents()

    def context(self, point):
        menu = QtWidgets.QMenu()
        if self.table.itemAt(point):
            column = self.table.itemAt(point).column()                          # +++
            if column == 1:                                                     # +++
                edit_question = QtWidgets.QAction('Получить URL', menu)
                
                edit_question.triggered.connect(lambda: print(                  
                    self.table.itemAt(point).text()                             # +++
                ))
                
                menu.addAction(edit_question)
        else:
            pass
        menu.exec(self.table.mapToGlobal(point))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = PageTable()
    window.resize(1000, 600)
    window.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка