PyQt/Qt: Wie Strecke ein Bild im Qlabel-widget?
Möchte ich ein Bild in meine app. Ich benutze QtDesigner, UI-design, verwenden Sie dann pyqt und zum codieren. Das problem ist das Bild, das gezeigt wird, ist das lager als die widget-Größe auf der Benutzeroberfläche. Ich beziehe mich auf die offizielle demo:
QT - Widget-Image Viewer Demo
hinzufügen imagelabel und scrollArea-code wie folgt:
---- 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()
aber nicht Strecken Sie das Bild, auch keine Bildlaufleiste angezeigt!
InformationsquelleAutor whuiscool | 2012-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie rufen Sie
self.label.setScaledContents(true);
. So, dassQLabel
wird die Größe sich nach der Größe der pixmap - /Bild-und scroll-Balken sichtbar werden. Sehen Sie diese Dokumentation.Ich habe es behoben! Mit debug habe ich festgestellt, dass 'lbl = QtGui.QLabel(selbst.label) 'hat falsch.
InformationsquelleAutor Ammar
Die default-Implementierung von QLabel::setScaledContents war nicht für mich arbeiten, da es mir nicht erlaubt zu halten das Seitenverhältnis, wenn die Bilder, wo die größeren dann die Bezeichnung
maximale Größen.
Diesem kleinen Helfer wird das Bild skalieren nach unten, um passen in ein label die maximale Größe, wenn nötig (aber nicht), immer halten Sie das Seitenverhältnis:
Der code von @Petrucio kann umgeschrieben werden in Python Recht einfach. Man schaue sich nur mal die PyQt-Dokumentation, so dass Sie nicht verpassen einige Paket-Namen, etc. Die
std::min
undstd::max
können auch ersetzt werden, mit Python ' s built-in Funktionen, die das gleiche tun.InformationsquelleAutor Petrucio
Ich nicht mit PyQt aber die QtPixmap Kontrolle skaliert hat () - Funktionen. Sie können die Größe des Bildes vor dem setzen in das label:
Dies ist der Beispiel-code, den ich verwenden in C++ zum ändern der Größe eines Bild auf der QLabel-Größe:
Ich habe es behoben! Mit debug habe ich festgestellt, dass 'lbl = QtGui.QLabel(selbst.label) 'hat falsch.
InformationsquelleAutor utrescu