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解析html提取数据,并生成word文档实例解析
Jan 22 Python
python版本的仿windows计划任务工具
Apr 30 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
Python安装与基本数据类型教程详解
May 29 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
深入了解Python iter() 方法的用法
Jul 11 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
Python生成器next方法和send方法区别详解
May 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下把数组保存为文件格式的实例应用
2010/02/08 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
php微信支付之APP支付方法
2015/03/04 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
Js 随机数产生6位数字
2010/05/13 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
利用jquery操作Radio方法小结
2014/10/20 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
Python 变量类型及命名规则介绍
2013/06/08 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
python dict 相同key 合并value的实例
2019/01/21 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
表彰会主持词
2014/03/26 职场文书
小学家长学校培训材料
2014/08/24 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
2015年团支书工作总结
2015/04/03 职场文书
交通事故起诉书
2015/05/19 职场文书
OpenCV实现反阈值二值化
2021/11/17 Java/Android
box-shadow单边阴影的实现
2023/05/21 HTML / CSS