Qt: как рассчитать координаты изображения на этикетке?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Qt: как рассчитать координаты изображения на этикетке?

Сообщение Anonymous »

Я пишу приложение, которое отображает изображение и позволяет пользователю взаимодействовать с изображением с помощью мыши. Размер изображения предопределен, и в коде ниже он составляет 2000x2000. Поскольку размер окна может быть меньше, изображение масштабируется до размера окна. Также я планирую добавить функцию масштабирования и, следовательно, использовать область прокрутки.
Вот код, который у меня есть (я использую PyQt5, но я почти уверен, что C++ Qt будет работать так же)< /p>

Код: Выделить всё

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

width, height = 2000, 2000
grid_step = 100

class MyWidget(QLabel):
def __init__(self):
super().__init__()

self.setStyleSheet("background-color: black")

def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
print(f"Position: {event.pos()}")

class ImageApp(QMainWindow):
def __init__(self, image_path=None):
super().__init__()

self.label = MyWidget()
self.label.setAlignment(Qt.AlignCenter)
self.scroll_area = QScrollArea()
self.scroll_area.setWidgetResizable(True)
self.scroll_area.setWidget(self.label)

self.setCentralWidget(self.scroll_area)

# Generate grid pixmap
self.pixmap = QPixmap(width, height)
self.pixmap.fill(Qt.black)
painter = QPainter(self.pixmap)
painter.setPen(QPen(Qt.white, 1, Qt.SolidLine))
for x in range(0, width, grid_step):
painter.drawLine(x, 0, x, height)
for y in range(0, height, grid_step):
painter.drawLine(0, y, width, y)
painter.end()

self.resize(1000, 800)

def resizeEvent(self, event):
super().resizeEvent(event)
scaled_pixmap = self.pixmap.scaled(self.size().shrunkBy(QMargins(1, 1, 1, 1)),
Qt.KeepAspectRatio, Qt.SmoothTransformation)
self.label.setPixmap(scaled_pixmap)
self.label.adjustSize()

if __name__ == '__main__':
app = QApplication(sys.argv)
window = ImageApp()
window.show()
sys.exit(app.exec_())
Проблема, с которой я столкнулся, заключается в том, что координаты в обработчике щелчка мыши являются координатами виджета метки. Это полезно для некоторых задач, например для рисования лассо с увеличением. Но в конце концов мне нужно получить координаты относительно исходного изображения размером 2000x2000. Возможно, я мог бы рассчитать коэффициент масштабирования при изменении размера изображения в окне, но это только часть проблемы. Вторая часть заключается в том, что окно может быть шире или уже и, следовательно, помещено в почтовый ящик с изображением путем добавления пустых областей сверху/снизу или слева/справа. К сожалению, я не нашел красивого и простого способа вычислить эти пустые области и перевести координаты окна в координаты изображения. Наконец, когда я добавляю функцию масштабирования и полосы прокрутки, пересчет может стать еще сложнее.
Итак, вопрос: существует ли быстрый и удобный, возможно, встроенный в Qt способ пересчета между окном и координаты изображения?

Подробнее здесь: https://stackoverflow.com/questions/791 ... s-on-label
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»