Python3用tkinter和PIL实现看图工具

 更新时间:2018年06月21日 15:33:14   作者:六个九十度  
这篇文章给大家分享了Python3用tkinter和PIL实现看图工具的详细实例代码,有兴趣的朋友参考学习下。

需求

想做看图工具的,必然要支持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()

最终显示效果

相关文章

  • python虚拟环境的安装配置图文教程

    python虚拟环境的安装配置图文教程

    下面小编就为大家带来一篇python虚拟环境的安装配置图文教程。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • pycharm找不到解释器问题的解决方案

    pycharm找不到解释器问题的解决方案

    安装好PyCharm之后,新建或者导入项目碰到找不到解释器的情况,不用担心,追根到底,咱们就是需要找到pycharm*.exe的文件,那么这个文件在哪里呢?所以本文就给大家介绍一下pycharm找不到解释器问题的解决方案,需要的朋友可以参考下
    2024-04-04
  • Python生成器generator和yield关键字的使用

    Python生成器generator和yield关键字的使用

    生成器是一种特殊的迭代器,可以通过列表推导式的修改或者使用yield关键字来创建,生成器函数能够在迭代时动态产生值,而不是一次性生成所有值,这有助于节省内存,yield关键字使函数执行暂停并保存当前状态,下次调用时从停止处继续执行
    2024-09-09
  • 解决pytorch报错:AssertionError: Invalid device id的问题

    解决pytorch报错:AssertionError: Invalid device id的问题

    今天小编就为大家分享一篇解决pytorch报错:AssertionError: Invalid device id的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • PyTorch手写数字数据集进行多分类

    PyTorch手写数字数据集进行多分类

    这篇文章主要介绍了PyTorch手写数字数据集进行多分类,损失函数采用交叉熵,激活函数采用ReLU,优化器采用带有动量的mini-batchSGD算法,需要的朋友可以参考一下
    2022-03-03
  • Python实现子类调用父类的方法

    Python实现子类调用父类的方法

    这篇文章主要介绍了Python实现子类调用父类的方法,解决子类覆盖父类初始化方法而出现的不确定问题,可通过调用超类构造方法的未绑定版本或者使用super函数来解决,需要的朋友可以参考下
    2014-11-11
  • python数组如何添加整行或整列

    python数组如何添加整行或整列

    这篇文章主要介绍了python数组如何添加整行或整列问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • python和numpy matplotlib版本匹配及安装指定版本库

    python和numpy matplotlib版本匹配及安装指定版本库

    Matplotlib 是 Python 的绘图库,它经常与NumPy一起使用,从而提供一种能够代替Matlab的方案,这篇文章主要给大家介绍了关于python和numpy matplotlib版本匹配及安装指定版本库的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 详解python基础中的for循环

    详解python基础中的for循环

    这篇文章主要为大家介绍了python的for循环,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • python requests库爬取豆瓣电视剧数据并保存到本地详解

    python requests库爬取豆瓣电视剧数据并保存到本地详解

    这篇文章主要介绍了python requests库爬取豆瓣电视剧数据并保存到本地详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08

最新评论