需求
想做看图工具的,必然要支持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等)
代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#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()
|
最终显示效果
原文链接:https://blog.csdn.net/happen23/article/details/78763530