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读取mp3中ID3信息的方法
Mar 05 Python
python脚本设置系统时间的两种方法
Feb 21 Python
遗传算法之Python实现代码
Oct 10 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 Python
python爬虫 爬取超清壁纸代码实例
Aug 16 Python
python读取与处理netcdf数据方式
Feb 14 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
keras分类模型中的输入数据与标签的维度实例
Jul 03 Python
python编写实现抽奖器
Sep 10 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
Jun 21 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怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
页面中iframe相互传值传参
2009/12/13 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
Django中几种重定向方法
2015/04/28 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
pandas值替换方法
2018/07/10 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
利用python绘制正态分布曲线
2021/01/04 Python
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
node中使用shell脚本的方法步骤
2021/03/23 Javascript
大型营销活动计划书
2014/04/28 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
中秋节慰问信
2015/02/15 职场文书
68句权威创业名言
2019/08/26 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery