3

私の要件は、画像のサイズを縮小して正方形のボックス (50 x 50) に表示することです。画像のサイズが正方形のボックスのサイズより小さい場合は、画像をそのまま表示する必要があります。最初の試みとして、すべての画像のサイズを小さくするために、以下のコードを試しました。

picSize = QtCore.QSize(lbl.width() / 2 , lbl.height() / 2)

しかし、以下のコードは、使用した後でも画像のサイズを縮小していません:

picSize = QtCore.QSize(lbl.width() / 4 , lbl.height() / 4)

私を助けてください。

import os
import sys

from PySide import QtGui, QtCore

class SecondExample(QtGui.QWidget):

    def __init__(self):
        super(SecondExample, self).__init__()
        self.initUI()

    def initUI(self):
        self.imgFolder = os.getcwd()


        self.widgetLayout = QtGui.QVBoxLayout(self)
        self.scrollarea = QtGui.QScrollArea()
        self.scrollarea.setWidgetResizable(True)
        self.widgetLayout.addWidget(self.scrollarea)
        self.widget = QtGui.QWidget()
        self.layout = QtGui.QVBoxLayout(self.widget)    
        self.scrollarea.setWidget(self.widget)

        self.layout.setAlignment(QtCore.Qt.AlignHCenter)

        for img in os.listdir(self.imgFolder):
            imgPath = os.path.join(self.imgFolder, img)
            actualImage = QtGui.QImage(imgPath)
            pixmap = QtGui.QPixmap(imgPath)

            lbl = QtGui.QLabel(self)
            lbl.setPixmap(pixmap)

            lbl.setScaledContents(True)

            picSize = QtCore.QSize(lbl.width() / 2 , lbl.height() / 2)
            lbl.resize(picSize)

            self.layout.addWidget(lbl)

        self.setGeometry(100, 100, 900, 700)
        self.setWindowTitle('Viewer')
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = SecondExample()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
4

3 に答える 3

8

次のコードは、要件を達成します。

            imgPath = os.path.join(self.imgFolder, img)
            actualImage = QtGui.QImage(imgPath)
            pixmap = QtGui.QPixmap(imgPath)
            pixmap = pixmap.scaled(500, 500, QtCore.Qt.KeepAspectRatio) 
            lbl = QtGui.QLabel(self)
            lbl.setPixmap(pixmap)

            lbl.setScaledContents(True)
于 2013-08-15T12:23:45.037 に答える
3

scaledToWidthまたは scaledToHeight method on theQImage` クラスを使用できます。

img= QtGui.QImage(imgPath)
pixmap = QtGui.QPixmap(img.scaledToWidth(50))
lbl = QtGui.QLabel(self)
lbl.setPixmap(pixmap)
于 2013-08-15T11:45:06.560 に答える
1

QPixmapを使用してスケーリングする必要がありますQPixmap::scaled

pixmap.scaled(picSize)

また、 AspectRatioを確認することもできます。

于 2013-08-15T11:42:51.950 に答える