Как нарисовать прямоугольник, чтобы извлечь рентабельность инвестиций в изображение QImage, отображаемое в виджете QlabePython

Программы на Python
Anonymous
Как нарисовать прямоугольник, чтобы извлечь рентабельность инвестиций в изображение QImage, отображаемое в виджете Qlabe

Сообщение Anonymous »

Я создал окно AnotherWidget на основе QWidget, которое содержит Qlabel и некоторые другие QLineEdit для отображения смещения X и Y, а также ширины и высоты для выбора прямоугольника. изображения. Начальное условие, которое необходимо выполнить, — нарисовать прямоугольник поверх изображения. отображение изображения в QLabel прошло успешно, но когда я рисую прямоугольник, кажется, что оно рисуется на фоне окна виджета. Вот несколько изображений, поясняющих ситуацию.
Окно виджета, над которым я работал:
это image
Текущая ситуация при рисовании прямоугольника:
эта ситуация image
Событие мыши и событие рисования были в порядке, но они рисуют прямоугольник на заднем плане! (Странно, возможно, я что-то упускаю при работе с Qlabel)
Я новичок во всех этих вещах PyQt и в настоящее время использую PySide6 в своей среде VSCode. вот код

class AnotherWidget(QWidget, Ui_ROIWidget):

def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("Custom ROI selection")
self.begin = QPoint()
self.end = QPoint()

def paintEvent(self, event):
super().paintEvent(event)

qp = QPainter(self)
br = QBrush(QColor(100, 10, 10, 40))
qp.setBrush(br)
qp.drawRect(QRect(self.begin, self.end))

def mousePressEvent(self, event):
self.begin = event.pos()
self.end = event.pos()
self.update()

def mouseMoveEvent(self, event):
self.end = event.pos()
self.update()

def mouseReleaseEvent(self, event):
self.begin = event.pos()
self.end = event.pos()
self.update()

@Slot()
def show_image(self,image):
self.label.setPixmap(QPixmap.fromImage(image))

Что с этим случилось? есть ли что-то, что я упустил в определении своего метода с помощью QPainter, или мне следует использовать другой виджет вместо Qlabel для отображения изображения? что мне делать?
РЕДАКТИРОВАТЬ
предполагая, что это может понадобиться, я использую QtDesigner для настройки всех виджетов и главное окно, и здесь я передаю ImageROI как сигнал захваченного изображения из потока камеры в метод главного окна.

class CameraProccess(QThread):
#Signal type definition
Image=Signal(QImage)
ImageProcess = Signal(QImage)
ImageCaptured = Signal(QImage)
ImageROI = Signal(QImage)

[...]

class mainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("Recorder Inspection Monitor V1.0")
self.resize(1280,800)

self.ROIwindow = AnotherWidget()
self.setROIButton.clicked.connect(self.toggle_roiWindow)

[...]

def toggle_roiWindow(self):
global setROI

setROI = True

if self.ROIwindow.isVisible()==False:
self.Worker1_Opencv.ImageROI.connect(self.ROIwindow.show_image)
self.ROIwindow.show()

else:
self.Worker1_Opencv.ImageROI.connect(self.ROIwindow.show_image)


Подробнее здесь: https://stackoverflow.com/questions/785 ... abel-widge

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