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 Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
使用Python实现一个简单的项目监控
Mar 31 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
Python函数返回不定数量的值方法
Jan 22 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
详解如何减少python内存的消耗
Aug 09 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
python中安装django模块的方法
Mar 12 Python
OpenCV+python实现膨胀和腐蚀的示例
Dec 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中提问频率最高的11个面试题和答案
2014/09/02 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
javascript数组详解
2014/10/22 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
layui table 参数设置方法
2018/08/14 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python根据开头和结尾字符串获取中间字符串的方法
2015/03/26 Python
django 自定义过滤器的实现
2019/02/26 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
导师评语大全
2014/04/26 职场文书
节水倡议书
2015/01/19 职场文书
闪闪红星观后感
2015/06/08 职场文书
追悼会家属答谢词
2015/09/29 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
ipad隐藏软件app图标方法
2022/04/19 数码科技
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS