关于tkinter中显示图片,因尺寸不同而无法全部显示的解决方案


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM