tkinter中顯示圖像,要考慮適應不同的分辨率下顯示問題。查了好多資料,封裝代碼如下。
import pyautogui import tkinter from PIL import Image, ImageTk ''' 思路是對一個pil_image對象進行縮放,讓它在一個矩形框內,保持比例 導入pyautogui可以忽略系統設置下的縮放功能 ''' def f1(w_, h_, png_image): ''' w_ : 要適應的窗口寬 h_ : 要適應的窗口高 png_image : Image.open后的圖片 ''' w, h = png_image.size # 獲取圖像的原始大小 f1 = 1.0 * w_ / w f2 = 1.0 * h_ / h factor = min([f1, f2]) width = int(w * factor) height = int(h * factor) return png_image.resize((width, height), Image.ANTIALIAS) # 創建窗口,必須在ImageTk.PhotoImage()之前! root = tkinter.Tk() root.geometry('760x1000+200+200') # resize函數使用過程: w_box = 760 h_box = 180 # 以一個PIL圖像對象打開 【調整待轉圖片格式】 png_image = Image.open("程序文件/f1.png") # 縮放圖像讓它保持比例,同時限制在一個矩形框范圍內 【調用函數,返回整改后的圖片】 png_image_resized = f1(w_box, h_box, png_image) # 把PNG圖像對象轉變為Tkinter的PhotoImage對象 【轉換格式,方便在窗口展示】 tk_image = ImageTk.PhotoImage(png_image_resized) # ==================================================================== # 把圖像大小顯示到指定的Label label = tkinter.Label(root, image=tk_image, width=w_box, height=h_box) # padx,pady是圖像與窗口邊緣的距離 label.place(x=0, y=0) root.mainloop()