Найти - Пользователи
Полная версия: PyQt5: перевод системы координат виджета в координаты QTableWidget
Начало » GUI » PyQt5: перевод системы координат виджета в координаты QTableWidget
1
saicat
Добрый день знатокам!

Есть главное окно приложения, внутри которого, кроме всего прочего, находится QTableWidget. Нужно сделать возможность скопировать содержимое item'а в буфер обмена. Проблема в том, что для корректного вычисления item'а на котором кликнул юзер, мне нужно получить координаты курсора (QPoint) относительно QTableWidget, а не относительно родительского виджета, которые выдает мне event.pos().

Вот код контекстного меню:

def contextMenuEvent(self, event):
        Rmenu = QMenu(self)
        CopyToClipboardAction = Rmenu.addAction("Copy content of the cell to clipboard")
        action = Rmenu.exec_(self.mapToGlobal(event.pos()))
        if action == CopyToClipboardAction:
            row = self.tableWidget.rowAt(event.pos().y())
            col = self.tableWidget.columnAt(event.pos().x())
            print("row:%d, col:%d" % (row, col))

Проблема состоит в том, что event.pos().x() и event.pos().y() выдают координаты относительно левого верхнего угла родительского виджета из-за чего row и column (rowAt, columnAt, itemAt) определяются неверно.

Как решить эту проблему и получить координаты относительно QTableWidget? Подскажите, пожалуйста. Спасибо заранее!!!
Rodegast
Координаты тебе нужны только для вывода кастомного меню. Текущий элемент получают примерно так:
item = self.tableWidget.item(self.tableWidget.currentIndex().row(), self.tableWidget.currentIndex().column())
saicat
Rodegast, спасибо тебе огромное! Работает как часики!

Попутно возник еще один вопрос: что нужно проверять, чтобы показывать контекстное меню только, если клик был в пределах tableWidget? В моем случае контекстное меню вылазит везде)))
Rodegast
Не нужно использовать contextMenuEvent. Если меню одно и тоже для всех элементов таблицы, то проще всего его создать как ActionsContextMenu
saicat
Переделал. Работает как надо. Понял разницу. Еще раз спасибо за помощь!!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB