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正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
python matlibplot绘制3D图形
Jul 02 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
Jul 11 Python
Python代理IP爬虫的新手使用教程
Sep 05 Python
关于tf.reverse_sequence()简述
Jan 20 Python
Python包和模块的分发详细介绍
Jun 19 Python
Python  word实现读取及导出代码解析
Jul 09 Python
Django中ORM的基本使用教程
Dec 22 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中uploaded_files函数使用方法详解
2011/03/09 PHP
php处理json时中文问题的解决方法
2011/04/12 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
任意位置显示html菜单
2007/02/01 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
Python脚本暴力破解栅栏密码
2015/10/19 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
python 实现有道翻译功能
2021/02/26 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
股权转让意向书
2014/04/01 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
课外访万家心得体会
2014/09/03 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang