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使用pil生成图片验证码的方法
May 08 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
对Python中plt的画图函数详解
Nov 07 Python
python多个模块py文件的数据共享实例
Jan 11 Python
浅谈python标准库--functools.partial
Mar 13 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
如何用python实现一个HTTP连接池
Jan 14 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 Python
python基础之文件操作
Oct 24 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和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
shiro授权的实现原理
2017/09/21 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
vue项目中api接口管理总结
2018/04/20 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
python基础教程之对象和类的实际运用
2014/08/29 Python
python统计日志ip访问数的方法
2015/07/06 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
python 使用get_argument获取url query参数
2017/04/28 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
一百多行python代码实现抢票助手
2018/09/25 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
经济担保书范文
2014/04/02 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
判断Python中的Nonetype类型
2021/05/25 Python
JavaScript实现栈结构详细过程
2021/12/06 Javascript
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android