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 回答