如何在(Py)Qt中允许统一纵横比缩放?
如果你有一个QImage放在QLabel里面,当你调整窗口大小时,能不能让它缩放,同时保持图片的宽高比(这样图片就不会变形)?我发现可以用setScaledContents()来缩放,而且你可以设置最小和最大尺寸,但图片还是会失去它的宽高比。
如果能用Python来解释那就太好了(因为我不懂C++),不过我也会接受其他的解释。:-)
提前谢谢你!
2 个回答
0
把图片转换成一个叫做 QPixmap
的格式(可以用 QPixmap.fromImage(img)
这个方法),然后你就可以使用 scaledToHeight()
这个功能来调整图片的高度了。
2
我这里用的是C++,因为我看的文档就是这个语言的。其实把它转换成Python也不太难。
你需要创建一个自定义的QLayoutItem
类,这个类要重写两个方法:bool hasHeightForWidth()
和int heightForWidth(int width)
,目的是保持图像的宽高比。你可以选择传入图像并查询它,或者直接设置宽高比。还要确保widget()
这个函数能返回正确的标签指针。
完成这些之后,你就可以像添加普通控件一样,把这个布局项添加到布局中。所以当你的标签被添加时,要把它改成使用你自定义的布局项类。
我其实还没有测试过这些,所以现在这只是个理论上的解决方案。如果想通过设计工具来实现,我不知道有没有办法。