PyQt5显示.9格式的PNG图片

做过安卓开发的和使用过QQ的都知道.9.png这种图片格式,效果就如QQ的聊天气泡一样可以拉伸,这种格式的图片允许开发人员定义可扩展区域,当需要延伸图片以填充比图片本身更大区域时,可扩展区的内容被延展;允许开发人员定义内容显示区,用于显示文字或其他内容。目前在Github上有两个C++版本的,在这里我把它们都用Python实现了一遍。另外一个我也为PyQt提供了编译好的pyd文件。

C++版本

在Github开源库中搜索到两个C++版本的

  1. 一个是 NinePatchQt
  2. 一个是 QtNinePatch

PyQt5版本

这里也分为两个版本,都是基于上面的C++源码翻译改写过来的,具体的例子见项目里面的测试代码吧。

  1. QtNinePatch是参考第一个源码编写,用法是在paintEvent中调用
  2. QtNinePatch2是参考第二个源码编写,用法是pixmap = QtNinePatch.createPixmapFromNinePatchImage(self.image, self.width(), self.height())直接得到一个处理好的QPixmap对象来使用

说明

  1. 建议优先使用pyd版本的(后续提供Python3.4 3.5 3.6 3.7 编译好的32为库文件),也可以自行编译,编译步骤见下文。
  2. 其次可以使用纯python版本2的(个人觉得方便调用)
  3. 最后再考虑纯python版本1的吧
  4. 以上为个人意见,两个C++版本的写法不一样,但是核心算法应该是类似的。

自行编译

  1. 首先要安装好Qt、PyQt5、编译安装对应的sip、对应的VC++编译工具
  2. 用Qt Creator 打开pro文件进行编译
  3. 进入源码中的sip文件夹修改configure.py文件
    # 这里是你的VC版本和对应的Qt目录中的文件夹
    config.platform = "win32-msvc2010"
    qt_path = 'D:/soft/Qt/Qt5.5.1/5.5/msvc2010'
    
  4. 最后执行python configure.py来编译

下载

https://github.com/PyQt5/PyQt/tree/master/QLabel

效果图

NinePatchImage


文章目录
  1. 1. C++版本
  2. 2. PyQt5版本
  3. 3. 说明
  4. 4. 自行编译
  5. 5. 下载
  6. 6. 效果图
|