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解析json实例方法
Nov 19 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
python 正则表达式参数替换实例详解
Jan 17 Python
Python3列表List入门知识附实例
Feb 09 Python
TensorBoard 计算图的查看方式
Feb 15 Python
Python拼接字符串的7种方式详解
Mar 19 Python
Pycharm中切换pytorch的环境和配置的教程详解
Mar 13 Python
Python接口测试数据库封装实现原理
May 09 Python
python实现Thrift服务端的方法
Apr 20 Python
Python包管理工具pip的15 个使用小技巧
May 17 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
Aug 30 Python
基于Python实现nc批量转tif格式
Aug 14 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获取url参数方法总结
2014/11/13 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
JQuery select标签操作代码段
2010/05/16 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
项目合作协议书
2014/04/16 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
创业计划书之养殖业
2019/10/11 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
完美解决golang go get私有仓库的问题
2021/05/05 Golang
GO中sync包自由控制并发示例详解
2022/08/05 Golang