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