我有以下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
)的大小根本没有调整。同样,为什么?
感谢您的帮助。
答案 0 :(得分:2)
不幸的是,标签内的图像没有缩小以正确放置top_frame。为什么是这样?
这是因为这不是tkinter的工作方式。它不会自动为您放大和缩小图像。它将扩大和缩小标签,但不会缩小内部的图像。您必须编写代码才能使用诸如Pillow之类的外部库来做到这一点。
此外,当我调整窗口的大小时,标签(以及图像)的大小完全没有调整。再次,为什么呢?
正如我先前所写,图像将永远不会改变。至于为什么标签不变,这是因为您已配置了标签不变。
考虑以下代码行:
label.pack(expand=1, side='left')
expand
选项表明,标签将获得任何额外的空间,tkinter会这样做。但是,通过将fill
选项保留为默认值,已指示tkinter 不扩展标签以填充分配给它的空间。
如果您希望标签增加,请添加fill='both'
。