Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt5: перевод системы координат виджета в координаты QTableWidget [RSS Feed]

#1 Июль 10, 2015 14:33:13

saicat
Зарегистрирован: 2014-05-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt5: перевод системы координат виджета в координаты QTableWidget

Добрый день знатокам!

Есть главное окно приложения, внутри которого, кроме всего прочего, находится 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? Подскажите, пожалуйста. Спасибо заранее!!!

Офлайн

#2 Июль 10, 2015 14:53:10

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

PyQt5: перевод системы координат виджета в координаты QTableWidget

Координаты тебе нужны только для вывода кастомного меню. Текущий элемент получают примерно так:

item = self.tableWidget.item(self.tableWidget.currentIndex().row(), self.tableWidget.currentIndex().column())



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Июль 10, 2015 15:23:02

saicat
Зарегистрирован: 2014-05-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt5: перевод системы координат виджета в координаты QTableWidget

Rodegast, спасибо тебе огромное! Работает как часики!

Попутно возник еще один вопрос: что нужно проверять, чтобы показывать контекстное меню только, если клик был в пределах tableWidget? В моем случае контекстное меню вылазит везде)))

Отредактировано saicat (Июль 10, 2015 15:38:24)

Офлайн

#4 Июль 10, 2015 16:06:27

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

PyQt5: перевод системы координат виджета в координаты QTableWidget

Не нужно использовать contextMenuEvent. Если меню одно и тоже для всех элементов таблицы, то проще всего его создать как ActionsContextMenu



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Июль 10, 2015 17:47:05

saicat
Зарегистрирован: 2014-05-08
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt5: перевод системы координат виджета в координаты QTableWidget

Переделал. Работает как надо. Понял разницу. Еще раз спасибо за помощь!!

Офлайн

  • Начало
  • » GUI
  • » PyQt5: перевод системы координат виджета в координаты QTableWidget[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version