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()