做过安卓开发的和使用过 QQ 的都知道 .9.png
这种图片格式,效果就如 QQ 的聊天气泡一样可以拉伸,这种格式的图片允许开发人员定义可扩展区域,当需要延伸图片以填充比图片本身更大区域时,可扩展区的内容被延展;允许开发人员定义内容显示区,用于显示文字或其他内容。目前在 Github
上有两个 C++ 版本的,在这里我把它们都用 Python 实现了一遍。另外一个我也为 PyQt
提供了编译好的 pyd 文件。
# C++ 版本
在 Github 开源库中搜索到两个 C++ 版本的
- 一个是 NinePatchQt
- 一个是 QtNinePatch
# PyQt5 版本
这里也分为两个版本,都是基于上面的 C++ 源码翻译改写过来的,具体的例子见项目里面的测试代码吧。
- QtNinePatch 是参考第一个源码编写,用法是在
paintEvent
中调用 - QtNinePatch2 是参考第二个源码编写,用法是
pixmap = QtNinePatch.createPixmapFromNinePatchImage(self.image, self.width(), self.height())
直接得到一个处理好的QPixmap
对象来使用
# 说明
- 建议优先使用 pyd 版本的(后续提供 Python3.4 3.5 3.6 3.7 编译好的 32 为库文件),也可以自行编译,编译步骤见下文。
- 其次可以使用纯 python 版本 2 的(个人觉得方便调用)
- 最后再考虑纯 python 版本 1 的吧
- 以上为个人意见,两个 C++ 版本的写法不一样,但是核心算法应该是类似的。
# 自行编译
- 首先要安装好 Qt、PyQt5、编译安装对应的 sip、对应的 VC++ 编译工具
- 用 Qt Creator 打开 pro 文件进行编译
- 进入源码中的 sip 文件夹修改 configure.py 文件
# 这里是你的VC版本和对应的Qt目录中的文件夹
config.platform = "win32-msvc2010"
qt_path = 'D:/soft/Qt/Qt5.5.1/5.5/msvc2010'
- 最后执行 python configure.py 来编译
# 下载
https://github.com/PyQt5/PyQt/tree/master/QLabel
# 效果图
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 PyQt!