需求
想做看圖工具的,必然要支持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-8import tkinter as tkfrom PIL import Image, ImageTkclass 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): passif __name__ == '__main__': root = tk.Tk() app = App(root) root.mainloop()
最終顯示效果
新聞熱點
疑難解答