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中global语句下全局变量的值的修改
Jun 16 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
Python复数属性和方法运算操作示例
Jul 21 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
Jun 27 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
如何Python使用re模块实现okenizer
Apr 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
PHP之变量、常量学习笔记
2008/03/27 PHP
php提高网站效率的技巧
2015/09/29 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
php 算法之实现相对路径的实例
2017/10/17 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
详解用python生成随机数的几种方法
2019/08/04 Python
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
公司应聘求职信
2014/06/21 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
个人求职自荐信范文
2015/03/06 职场文书
企业催款函范本
2015/06/24 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS