tk.Label图片大小不正确

时间:2019-07-31 14:04:59

标签: python python-3.x image tkinter label

我有以下tkinter示例:

from PIL import Image, ImageTk
import tkinter as tk

root = tk.Toplevel()

container_frame = tk.Frame(master=root)
container_frame.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
top_frame = tk.Frame(container_frame, background='red')
middle_frame = tk.Frame(container_frame, background='green')
bottom_frame = tk.Frame(container_frame, background='blue')

top_frame.grid(row=0, column=0, sticky='NSEW')
middle_frame.grid(row=1, column=0, sticky='NSEW')
bottom_frame.grid(row=2, column=0, sticky='NSEW')
container_frame.grid_columnconfigure(0, weight=1)
container_frame.grid_rowconfigure(0, weight=1, uniform='container_frame')
container_frame.grid_rowconfigure(1, weight=7, uniform='container_frame')
container_frame.grid_rowconfigure(2, weight=2, uniform='container_frame')

image = Image.open('some_image.png')
photo_image = ImageTk.PhotoImage(image)
label = tk.Label(top_frame, image=photo_image, background='yellow', anchor='w')
label.image = photo_image
label.pack(expand=1, side='left')

root.geometry('1280x720')
root.mainloop()

很遗憾,image中的label尚未缩小,无法正确地适合top_frame这是为什么? 此外,当我调整窗口的大小时,label(因此image)的大小根本没有调整。同样,为什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

  

不幸的是,标签内的图像没有缩小以正确放置top_frame。为什么是这样?

这是因为这不是tkinter的工作方式。它不会自动为您放大和缩小图像。它将扩大和缩小标签,但不会缩小内部的图像。您必须编写代码才能使用诸如Pillow之类的外部库来做到这一点。

  

此外,当我调整窗口的大小时,标签(以及图像)的大小完全没有调整。再次,为什么呢?

正如我先前所写,图像将永远不会改变。至于为什么标签不变,这是因为您已配置了标签不变。

考虑以下代码行:

label.pack(expand=1, side='left')

expand选项表明,标签将获得任何额外的空间,tkinter会这样做。但是,通过将fill选项保留为默认值,已指示tkinter 扩展标签以填充分配给它的空间。

如果您希望标签增加,请添加fill='both'