Здравствуйте, столкнулся с проблемой, что resizeEvent запускается, когда я в нем (resizeEvent) изменяю pixmap у QLabel, которая является подвиджетом QWidget в моей программе.
Код, для понимания:
class EjectedObject(QWidget, Ui_Form_Ejected_Object):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
def resizeEvent(self, event: QResizeEvent = None) -> None:
pixmap = QPixmap()
pixmap.loadFromData(self.image_data)
original_image_size = cv2.imdecode(
np.frombuffer(self.image_data, np.uint8), -1).shape
width_ratio = event.size().width() / original_image_size[0]
height_ratio = event.size().height() / original_image_size[1]
scale_ratio = min(width_ratio, height_ratio)
pixmap = pixmap.scaled(
int(original_image_size[0] * scale_ratio),
int(original_image_size[1] * scale_ratio),
)
self.label_image.setPixmap(pixmap)
self.label_image.setAlignment(Qt.AlignmentFlag.AlignCenter)
event.accept()
pass
Структура Ui_Form_Ejected_Objectclass Ui_Form_Ejected_Object(object):
def setupUi(self, Form_Ejected_Object):
Form_Ejected_Object.setObjectName("Form_Ejected_Object")
Form_Ejected_Object.resize(400, 300)
self.verticalLayout = QtWidgets.QVBoxLayout(Form_Ejected_Object)
self.verticalLayout.setObjectName("verticalLayout")
self.groupBox = QtWidgets.QGroupBox(parent=Form_Ejected_Object)
self.groupBox.setTitle("")
self.groupBox.setObjectName("groupBox")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label_image = QtWidgets.QLabel(parent=self.groupBox)
self.label_image.setText("")
self.label_image.setObjectName("label_image")
self.verticalLayout_2.addWidget(self.label_image)
self.verticalLayout.addWidget(self.groupBox)
self.retranslateUi(Form_Ejected_Object)
QtCore.QMetaObject.connectSlotsByName(Form_Ejected_Object)
def retranslateUi(self, Form_Ejected_Object):
_translate = QtCore.QCoreApplication.translate
Form_Ejected_Object.setWindowTitle(_translate("Form_Ejected_Object", "Form"))
Дело в том, что объект EjectedObject я добавляю в QGridLayout, который меняет размеры виджетов ему подвластных, и хочу, чтобы изображение внутри виджета подстраивалось под размер, который ему сейчас доступен, а вместо этого, при изменении размера изображения, снова вызывается resizeEvent