1

次のコードがあります。これは、ディスクから画像をロードし、それを30 x 30に縮小しようとします。後で、ラベルをグリッドレイアウトに追加します。残念ながら、画像は意図したサイズに縮小されていないため、グリッドレイアウトのすべてのセルのサイズが異なります。

 pixmap = QtGui.QPixmap(filename)
 pixmap.scaled(QtCore.QSize(30,30), QtCore.Qt.KeepAspectRatio, QtCore.Qt.FastTransformation)
 self.L.append(pixmap)
 lbl = QtGui.QLabel(self)
 lbl.setPixmap(pixmap)
 lbl.setScaledContents(True)
 column=len(self.L)
 self.ui.gridLayout.addWidget(lbl,0,column,Qt.AlignLeft | Qt.AlignTop)
4

1 に答える 1

2

pixmap.scaled画像のインプレース変換を行うと確信していますか? 新しいスケーリングされた画像が返されることを期待していました-それを変数に割り当てて、代わりに使用します。

このドキュメントによると:

画像のスケーリングされたコピーを返します。返されたイメージは、指定された変換モードを使用して、指定された高さにスケーリングされます。ピックスマップの縦横比が維持されるように、ピックスマップの幅が自動的に計算されます。

だから、私はあなたがやるべきだと思います:

 pixmap = QtGui.QPixmap(filename)
 # FIXED:
 scaled_pixmap = pixmap.scaled(QtCore.QSize(30,30), QtCore.Qt.KeepAspectRatio, QtCore.Qt.FastTransformation)
 self.L.append(scaled_pixmap) # FIXED
 lbl = QtGui.QLabel(self)
 lbl.setPixmap(pixmap)
 lbl.setScaledContents(True)
 column=len(self.L)
 self.ui.gridLayout.addWidget(lbl,0,column,Qt.AlignLeft | Qt.AlignTop)
于 2012-07-06T10:50:15.463 に答える