Python3用tkinter和PIL实现看图工具


Posted in Python onJune 21, 2018

需求

想做看图工具的,必然要支持jpg、png等常见格式,但tkinter是个纯粹的GUI库,不像GTK、QT那样大而全,所以只支持gif和ppm两种格式,局限很大,必须搭配图像处理库,才能实现基本的看图功能
在python生态系统里,最常用的图像处理库是PIL

Python3下库的安装

这两个库在python3下跟python2有一定差异:
tkinter首字母变成小写
PIL官方还不支持Python3,但有个fork叫Pillow,可以替代官方并且接口保持不变,需要pip install Pillow安装

技术原理

那么怎么让PIL读取jpg文件生成的内存对象被tkinter处理呢?PIL的开发人员很贴心的提供了一个PhotoImage类,跟tkinter包里的同名类接口兼容,所以可以直接将PIL生成的PhotoImage对象赋给tkinter中能接收PhotoImage入参的所有控件(比如Label、Canvas等)

代码示例

#encoding=utf-8
import tkinter as tk
from PIL import Image, ImageTk

class App(tk.Frame):
  def __init__(self, master=None):
    super().__init__(master, width=400, height=300)
    self.pack()
    self.pilImage = Image.open("CSDN.png")
    self.tkImage = ImageTk.PhotoImage(image=self.pilImage)
    self.label = tk.Label(self, image=self.tkImage)
    self.label.pack()

  def processEvent(self, event):
    pass

if __name__ == '__main__':
  root = tk.Tk()
  app = App(root)
  root.mainloop()

最终显示效果

Python3用tkinter和PIL实现看图工具

Python 相关文章推荐
Python中为什么要用self探讨
Apr 14 Python
python 实现在Excel末尾增加新行
May 02 Python
完美解决Python 2.7不能正常使用pip install的问题
Jun 12 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
Django如何防止定时任务并发浅析
May 14 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
django之导入并执行自定义的函数模块图解
Apr 01 Python
keras打印loss对权重的导数方式
Jun 10 Python
keras做CNN的训练误差loss的下降操作
Jun 22 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 Python
python 实现有道翻译功能
Feb 26 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
Python3.4 tkinter,PIL图片转换
Jun 21 #Python
Python3实现转换Image图片格式
Jun 21 #Python
python3实现域名查询和whois查询功能
Jun 21 #Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 #Python
详解Python下ftp上传文件linux服务器
Jun 21 #Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 #Python
python实现黑客字幕雨效果
Jun 21 #Python
You might like
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
PHP 简单日历实现代码
2009/10/28 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
js实现消灭星星(web简易版)
2020/03/24 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
Python字符串及文本模式方法详解
2020/09/10 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
会计专业的自荐信
2013/12/12 职场文书
大学生实习思想汇报
2014/01/12 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
高中班主任评语大全
2014/04/25 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS