Как отслеживать положение мыши внутри виджета изображения после изменения размера и избегать слепых зон в PySide6? [дублPython

Программы на Python
Ответить
Anonymous
 Как отслеживать положение мыши внутри виджета изображения после изменения размера и избегать слепых зон в PySide6? [дубл

Сообщение Anonymous »

Я пытаюсь распечатать положение мыши только тогда, когда пользователь нажимает на виджет изображения в приложении PySide6, но столкнулся с несколькими проблемами:
  • < li>Слепые зоны. После нажатия на изображение возникают «слепые зоны», в которых положение мыши не отслеживается правильно.
  • Пустые места после изменения размера: когда я меняю размер В окне под изображением есть пустые места, и неправильно отображается, что щелкнули по изображению за пределами его границ.
Вот соответствующий код:

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

from PySide6.QtGui import QImage, QPixmap, Qt, QColor
from PySide6.QtWidgets import QWidget, QLabel, QVBoxLayout, QSizePolicy
import cv2

from utils.environment import Environment

class LayoutMouseVisualisation(QWidget):
def __init__(self, parent=None):
super(LayoutMouseVisualisation, self).__init__(parent)
self.setStyleSheet("""
QWidget {
background-color: black;
}
""")
self.controller = ControllerMouseVisualisation(self)
self.layout = QVBoxLayout()
self.setLayout(self.layout)
self.image_label = QLabel()
self.update_img(self.controller.get_teeth_image())
self.image_label.mousePressEvent = self.mousePressEvent
self.layout.addWidget(self.image_label)

def update_img(self, img):
height, width, channel = img.shape
bytes_per_line = 3 * width
# noinspection all
self.q_img = QImage(img.data, width, height, bytes_per_line, QImage.Format_RGB888)
pixmap = QPixmap.fromImage(self.q_img)
self.image_label.setPixmap(pixmap)

def mousePressEvent(self, event):
x = event.pos().x()
y = event.pos().y()

img_width, img_height, _ = self.controller.get_image_shape()

label_rect = self.image_label.geometry()
label_x = label_rect.x()
label_y = label_rect.y()

print(f"Label geometry: x={label_x}, y={label_y}, width={label_rect.width()}, height={label_rect.height()}")

# Check if the click is inside the image area
if label_x 

Подробнее здесь: [url]https://stackoverflow.com/questions/79228080/how-to-track-mouse-position-inside-an-image-widget-after-resizing-and-avoid-blin[/url]
Ответить

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

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

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

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

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