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爬取Coursera课程资源的详细过程
Nov 04 Python
Python实现的批量下载RFC文档
Mar 10 Python
python求解水仙花数的方法
May 11 Python
python使用代理ip访问网站的实例
May 07 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
python实现名片管理系统
Nov 29 Python
python实现杨氏矩阵查找
Mar 02 Python
Python 实现将数组/矩阵转换成Image类
Jan 09 Python
python使用PIL剪切和拼接图片
Mar 23 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
python 实现学生信息管理系统的示例
Nov 28 Python
python四种出行路线规划的实现
Jun 23 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
多php服务器实现多session并发运行
2006/10/09 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
ajax jquery实现页面某一个div的刷新效果
2021/03/04 jQuery
Python实现多行注释的另类方法
2014/08/22 Python
Python生成随机密码
2015/03/10 Python
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
Pygame的程序开始示例代码
2020/05/07 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
大学生的网络创业计划书
2013/12/26 职场文书
家长给老师的道歉信
2014/01/13 职场文书
幼师自我鉴定
2014/02/01 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
网吧员工管理制度
2015/08/05 职场文书
redis数据一致性的实现示例
2022/03/18 Redis
Java中的继承、多态以及封装
2022/04/11 Java/Android