如何在(Py)Qt中允许统一纵横比缩放?

1 投票
2 回答
2591 浏览
提问于 2025-04-15 15:25

如果你有一个QImage放在QLabel里面,当你调整窗口大小时,能不能让它缩放,同时保持图片的宽高比(这样图片就不会变形)?我发现可以用setScaledContents()来缩放,而且你可以设置最小和最大尺寸,但图片还是会失去它的宽高比。

如果能用Python来解释那就太好了(因为我不懂C++),不过我也会接受其他的解释。:-)

提前谢谢你!

2 个回答

0

把图片转换成一个叫做 QPixmap 的格式(可以用 QPixmap.fromImage(img) 这个方法),然后你就可以使用 scaledToHeight() 这个功能来调整图片的高度了。

2

我这里用的是C++,因为我看的文档就是这个语言的。其实把它转换成Python也不太难。

你需要创建一个自定义的QLayoutItem类,这个类要重写两个方法:bool hasHeightForWidth()int heightForWidth(int width),目的是保持图像的宽高比。你可以选择传入图像并查询它,或者直接设置宽高比。还要确保widget()这个函数能返回正确的标签指针。

完成这些之后,你就可以像添加普通控件一样,把这个布局项添加到布局中。所以当你的标签被添加时,要把它改成使用你自定义的布局项类。

我其实还没有测试过这些,所以现在这只是个理论上的解决方案。如果想通过设计工具来实现,我不知道有没有办法。

撰写回答