[英]Image not showing while trying to draw a rectangle over a PyQt QLabel
嘗試在QLabel
圖像上繪制矩形時,圖像不顯示。 我希望能夠在照片上繪制一個矩形並能夠保留該矩形/隱藏它。 這是我在這里檢查建議后嘗試的:
from PyQt5.QtGui import QPixmap, QImage, QPainter, QBrush, QColor
from PyQt5.QtWidgets import QMainWindow, QApplication, QDesktopWidget, QVBoxLayout, QWidget, QLabel
from PyQt5.QtCore import QPoint, QRect
import sys
import cv2
class TestRect(QLabel):
def __init__(self):
super().__init__()
self.begin = QPoint()
self.end = QPoint()
def paintEvent(self, 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()
class TestWindow(QMainWindow):
def __init__(self):
super().__init__()
self.current_image = None
win_rectangle = self.frameGeometry()
center_point = QDesktopWidget().availableGeometry().center()
win_rectangle.moveCenter(center_point)
self.move(win_rectangle.topLeft())
self.main_layout = QVBoxLayout()
self.central_widget = QWidget(self)
self.test_image()
self.show()
def test_image(self):
self.central_widget.setLayout(self.main_layout)
self.setCentralWidget(self.central_widget)
image = TestRect()
self.main_layout.addWidget(image)
uploaded = cv2.imread('test.jpg')
resized = cv2.resize(uploaded, (500, 500))
height, width = 500, 500
self.current_image = QImage(resized, height, width, QImage.Format_RGB888)
image.setPixmap(QPixmap(self.current_image))
if __name__ == '__main__':
test = QApplication(sys.argv)
test_window = TestWindow()
sys.exit(test.exec_())
如果您在不通過 super 調用父級實現的情況下覆蓋一個方法,則將不會使用先前的行為,這就是您的情況: QLabel 的正常行為是繪制但覆蓋而不是調用 super it was removed 。 解決辦法是:
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.