PyQt/Qt: Comment faire pour étirer une image dans le Qlabel widget?
Je veux afficher une image dans mon application. J'utilise QtDesigner pour la conception de l'INTERFACE utilisateur, puis utilisez pyqt pour le codage. Le problème, c'est l'image qui sera affichée est plus grandes que la taille de widget sur l'INTERFACE utilisateur. Je me réfère à l'officiel de la démo:
Widget QT de la Visionneuse d'Images de Démonstration
ajouter imagelabel et scrollArea, le code comme suit:
---- 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()
mais il n'a pas d'étirer l'image, même pas de barre de défilement s'affichent!
Vous devez vous connecter pour publier un commentaire.
Vous devez appeler
self.label.setScaledContents(true);
. De sorte queQLabel
redimensionner à la taille de pixmap/image et de la barre de défilement sont visible. Voir ce la documentation.Le défaut de mise en œuvre de QLabel::setScaledContents ne fonctionnait pas pour moi, car elle ne me permet pas de garder le ratio d'aspect lorsque les images où la taille de l'étiquette
les tailles maximales.
Ce petit assistant à l'échelle de l'image vers le bas pour s'adapter dans une étiquette de taille maximale en cas de besoin (mais pas), toujours en gardant le ratio d'aspect:
std::min
etstd::max
peut également être remplacé par Python intégré de fonctions qui font de même.Je n'utilisez pas de PyQt mais la QtPixmap de contrôle a renforcé les fonctions de (). Vous pouvez redimensionner l'image avant de la mettre dans l'étiquette:
C'est l'exemple de code que j'ai utiliser en C++ pour redimensionner une image pour le QLabel taille: