需求
想做看圖工具的,必然要支持jpg、png等常見(jiàn)格式,但tkinter是個(gè)純粹的GUI庫(kù),不像GTK、QT那樣大而全,所以只支持gif和ppm兩種格式,局限很大,必須搭配圖像處理庫(kù),才能實(shí)現(xiàn)基本的看圖功能
在python生態(tài)系統(tǒng)里,最常用的圖像處理庫(kù)是PIL
Python3下庫(kù)的安裝
這兩個(gè)庫(kù)在python3下跟python2有一定差異:
tkinter首字母變成小寫(xiě)
PIL官方還不支持Python3,但有個(gè)fork叫Pillow,可以替代官方并且接口保持不變,需要pip install Pillow安裝
技術(shù)原理
那么怎么讓PIL讀取jpg文件生成的內(nèi)存對(duì)象被tkinter處理呢?PIL的開(kāi)發(fā)人員很貼心的提供了一個(gè)PhotoImage類(lèi),跟tkinter包里的同名類(lèi)接口兼容,所以可以直接將PIL生成的PhotoImage對(duì)象賦給tkinter中能接收PhotoImage入?yún)⒌乃锌丶ū热鏛abel、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