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中pip安装非PyPI官网第三方库的方法
Jun 02 Python
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
Python新手如何理解循环加载模块
May 29 Python
python使用隐式循环快速求和的实现示例
Sep 11 Python
python lambda的使用详解
Feb 26 Python
Python图片验证码降噪和8邻域降噪
Aug 30 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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连mysql和oracle数据库性能比较
2006/10/09 PHP
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
使用Python抓取模板之家的CSS模板
2015/03/16 Python
Python入门_浅谈for循环、while循环
2017/05/16 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
解决python 文本过滤和清理问题
2019/08/28 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
社会保险接收函
2014/01/12 职场文书
小学教师评语大全
2014/04/23 职场文书
学生期末评语大全
2014/04/30 职场文书
企业负责人任命书
2014/06/05 职场文书
社团活动总结格式
2014/08/29 职场文书
2014最新离职证明范本
2014/09/12 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS