Ant*_*ara 2 python aspect-ratio pyqt4 qpixmap qlabel
我正在编写一个程序,允许我通过他们的API将照片上传到TUMBLR,我已经上传了(感谢你们).
我在GUI的一侧放了一个'queueBox',它显示了图像名称,它们存储在QListWidget中.我把它放在我的Main Class'构造函数中:
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
self.queueBox.itemClicked.connect(self.displayPhoto)
Run Code Online (Sandbox Code Playgroud)
我有这个方法:
def displayPhoto(self, item):
tempName = (item.text())
print tempName
self.myLabel.setPixmap(QtGui.QPixmap(_fromUtf8(directory + '\\' + tempName)))
## self.myLabel.pixmap(QPixmap.scaled(aspectRatioMode = Qt.IgnoreAspectRatio))
## ^ ^ ^ What do I do with this? How do I set it to maintain aspect ratio?
## Currently it says ''NameError: global name 'Qt' is not defined''
Run Code Online (Sandbox Code Playgroud)
这成功地将图像绘制到myLabel,这是一个QLabel,然而,它是非常规模的,我有
self.myLabel.setScaledContents(True)
Run Code Online (Sandbox Code Playgroud)
在我的ui_mainWindow类中,如果我将其转换为False,它会修复缩放,但它只显示图像的一小部分,因为图像比QLabel大得多.我想要的是能够保持纵横比,所以它看起来不会缩放和可怕.
我发现了这个:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qpixmap.html 它说如何使用它,但是我无法让它工作,如上面的代码所示在我的评论中.有谁知道如何使用它?如果是这样,你能给我一个例子吗,我试过搜索但是我得到的大部分结果都是用C++编写的例子,而不是python.
谢谢!
摆脱了
self.myLabel.setScaledContents(True)
Run Code Online (Sandbox Code Playgroud)
调用(或将其设置为False).它使用像素图填充您的小部件,而不关心宽高比.
如果您需要调整大小QPixmap,正如您所发现的那样,scaled是必需的方法.但你错误地调用了它.我们来看看定义:
QPixmap QPixmap.scaled (self,
int width,
int height,
Qt.AspectRatioMode aspectRatioMode = Qt.IgnoreAspectRatio,
Qt.TransformationMode transformMode = Qt.FastTransformation)
Run Code Online (Sandbox Code Playgroud)
返回此函数的类型QPixmap,因此它返回原始像素图的缩放副本.
然后你需要a width和a 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))
Run Code Online (Sandbox Code Playgroud)
或者,如果您有一个固定的大小QLabel,您可以调用该.size()方法从中获取大小:
self.myLabel.setPixmap(QtGui.QPixmap(_fromUtf8(directory + '\\' + tempName)).scaled(self.myLabel.size(), QtCore.Qt.KeepAspectRatio))
Run Code Online (Sandbox Code Playgroud)
注意:您可能希望使用os.path.join(directory, tempName)该directory + '\\' + tempName部件.
| 归档时间: |
|
| 查看次数: |
9908 次 |
| 最近记录: |