godex qt pyqt

godex - PyQt/Qt: ¿Cómo estirar una imagen en el widget de Qlabel?



qlabel qt5 (3)

Quiero mostrar una imagen en mi aplicación. Yo uso QtDesigner para diseñar UI, luego uso pyqt para codificar. El problema es que la imagen que se mostrará es mayor que el tamaño del widget en la interfaz de usuario. Me refiero a la demostración oficial: QT - Widget Image Viewer Demo

agregue la etiqueta de la imagen y scrollArea, codifique de la siguiente manera:

---- UI init ---- self.label = QtGui.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(40, 140, 361, 511)) self.label.setSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Preferred) self.label.setObjectName(_fromUtf8("label")) self.scrollArea = QtGui.QScrollArea(self.centralwidget) self.scrollArea.setGeometry(QtCore.QRect(40, 140, 361, 511)) self.scrollArea.setWidget(self.label) self.scrollArea.setObjectName(_fromUtf8("scrollArea")) ---- function ---- filename = "./Penguins.jpg" image = QtGui.QImage(filename) pp = QtGui.QPixmap.fromImage(image) lbl = QtGui.QLabel(self.label) lbl.setPixmap(pp) self.scrollArea.setWidgetResizable(True) lbl.show()

pero no estira la imagen, ¡incluso no aparece la barra de desplazamiento!


No uso PyQt pero el control QtPixmap tiene funciones escaladas (). Puede cambiar el tamaño de la imagen antes de ponerla en la etiqueta:

  • escamoso()
  • ScaledToHeight ()
  • ScaledToWidth ()

Este es el código de muestra que uso en C ++ para cambiar el tamaño de una imagen al tamaño QLabel:

imatge.load("sprite.png"); QPixmap imatge2 = imatge.scaled(ui->label->width(),ui->label->height());


self.label.setScaledContents(true); llamar a self.label.setScaledContents(true); . De modo que QLabel se redimensionará al tamaño de pixmap / image y la barra de desplazamiento se hará visible. Vea esta documentación .


La implementación predeterminada de QLabel :: setScaledContents no funcionaba para mí, ya que no me permitía mantener la relación de aspecto cuando las imágenes eran más grandes que los tamaños máximos de la etiqueta.

Este pequeño ayudante escalará la imagen para ajustarla al tamaño máximo de una etiqueta si es necesario (pero no hacia arriba), manteniendo siempre la relación de aspecto:

/** * Fill a QLabel widget with an image file, respecting the widget''s maximum sizes, * while scaling the image down if needed (but not up), and keeping the aspect ratio * Returns false if image loading failed ****************************************************************************/ static bool SetLabelImage(QLabel *label, QString imageFileName) { QPixmap pixmap(imageFileName); if (pixmap.isNull()) return false; int w = std::min(pixmap.width(), label->maximumWidth()); int h = std::min(pixmap.height(), label->maximumHeight()); pixmap = pixmap.scaled(QSize(w, h), Qt::KeepAspectRatio, Qt::SmoothTransformation); label->setPixmap(pixmap); return true; }