Избавьтесь от вызова
self.myLabel.setScaledContents(True)
(или установите для него значение False).Он заполняет ваш виджет растровым изображением, не заботясь о соотношении сторон.
Если вам нужно изменить размер QPixmap
, как вы обнаружили, scaled
является обязательным методом.Но вы ссылаетесь на это неправильно.Давайте посмотрим на определение:
QPixmap QPixmap.scaled (self,
int width,
int height,
Qt.AspectRatioMode aspectRatioMode = Qt.IgnoreAspectRatio,
Qt.TransformationMode transformMode = Qt.FastTransformation)
Тип возврата этой функции QPixmap
, поэтому она возвращает масштабированную копию исходного растрового изображения.
Затем вынужны width
и height
, описывающие (максимальный) конечный размер растрового изображения.
Еще два необязательных параметра.aspectRatioMode
имеет дело с, хорошим соотношением сторон.Документация описывает различные параметры и их эффекты.transformMode
определяет, как (какой алгоритм) выполняется масштабирование.Это может изменить окончательное качество вашего изображения.Вам, вероятно, это не нужно.
Итак, чтобы сложить его вместе, вы должны иметь (Qt
пространство имен внутри QtCore
):
# substitute the width and height to desired values
self.myLabel.setPixmap(QtGui.QPixmap(_fromUtf8(directory + '\\' + tempName)).scaled(width, height, QtCore.Qt.KeepAspectRatio))
В качестве альтернативы, если у вас естьфиксированный размер QLabel
, вы можете вызвать метод .size()
, чтобы получить из него размер:
self.myLabel.setPixmap(QtGui.QPixmap(_fromUtf8(directory + '\\' + tempName)).scaled(self.myLabel.size(), QtCore.Qt.KeepAspectRatio))
Примечание : вы можете использовать os.path.join(directory, tempName)
для directory + '\\' + tempName
часть.