python - 为什么此代码使 Tkinter 窗口不断自动调整大小/增长?

标签 python tkinter callback python-imaging-library tkinter-canvas

本应使图像标签随窗口调整大小,但整个窗口(连同图像)会自行调整大小。

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/

相关文章:

python - Python 的 Google App Engine utf-8 编码问题

python - 如何在 HTTP 响应中返回 HTML 文件(Azure-Functions)

不调用 MPI_Comm_create_keyval 中提供的回调

javascript - 在 NodeJS 中处理异步 URL 解析

Python: string.replace ("\' ","' ") 读取txt文件后

python - 如果 pandas Dataframe 列值与单词匹配,则将其替换为列表

python - 如何在 guizero 应用程序中按下 Enter 键时调用函数?

Python (tkinter) 错误 : "CRC check failed"

python - 调整 tkinter 窗口大小以实现全屏

java - 从 Android 中的 AlertDialog 返回信息