python - 为什么这段代码会使 Tkinter 窗口不断地自动调整大小/增长?
问题描述
它应该使图像标签随窗口调整大小,但整个窗口(连同图像)都会根据自己的想法调整大小。
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 为零,和/或将图像调整为比标签小几个像素,这样您就不会强制标签增长。
推荐阅读
- markdown - Pelican:markdown 代码块 '>' 变成了 '>'
- php - imagick 转换和执行
- java - 当前位置不会立即显示
- java - 如何通过休眠环境审计两个具有一对一关系的表?
- powershell - 通过删除文件扩展名(.csv 或 .xlsx)后的时间戳来重命名文件名
- c# - 当我销毁我的对象时,在不同的位置创建新的对象
- php - 集成 windows 活动目录 PHP Web 应用程序
- sql-server - SQL Server 2012 - 文本列 - 将一列拆分为多行
- linux-kernel - 在新机器上为现有代码库设置交叉编译器
- linux - Linux bash 如何在复制命令中使用通配符的结果作为文件名