本应使图像标签随窗口调整大小,但整个窗口(连同图像)会自行调整大小。
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, height=500, width=500)
canvas.pack()
from PIL import Image, ImageTk
def resize_image(event):
new_width = event.width
new_height = event.height
image = copy_of_image.resize((new_width, new_height))
photo = ImageTk.PhotoImage(image)
label.configure(image = photo)
label.image = photo
image = Image.open("*file path to image*")
copy_of_image = image.copy()
photo = ImageTk.PhotoImage(image)
label = tk.Label(canvas, image=photo)
label.bind('<Configure>', resize_image)
label.pack(fill='both', expand='yes')
root.mainloop()
最佳答案
只要小部件改变大小时,您就会调用一个函数。在该函数中,您正在将图像大小调整为标签的大小。但是,图像周围可能有边框或填充,因此这会导致标签略微增大。因为标签增长,它触发了 <Configure>
再次调整图像大小的事件,这会导致标签更改大小,从而触发 <Configure>
再次调整图像大小的事件,这会导致标签改变大小,....
解决方案是确保 borderwidth 和 highlightthickness 为零,和/或将图像的大小调整为比标签小几个像素,这样您就不会强制标签变大。
关于python - 为什么此代码使 Tkinter 窗口不断自动调整大小/增长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58056320/