是否可以在 tkinter 中制作上传的照片?

问题描述

正如所讨论的那样,是否可以上传照片并使其具有相关性? 我正在尝试将图像上传到我的 GUI,但它不是相对的,因此当您最大化窗口时,不幸的是它的大小存在问题。

我想在调整窗口大小时动态更改图像大小

一些示例代码

import tkinter as tk
from PIL import ImageTk,Image

HEIGHT,WIDTH = 640,700
root = tk.Tk()
canvas0 = tk.Canvas(height=HEIGHT,width=WIDTH)
canvas0.pack()

canvas = tk.Canvas(bg='black')
canvas.place(relx=0,rely=0,relheight=1,relwidth=1)

frame = tk.Frame(canvas,bg='#009900')
frame.place(relx=0.12,y=2,relwidth=0.75,relheight=1)

column_1_img = Image.open('column.png')
column_1_img = ImageTk.PhotoImage(column_1_img)
column_label_1 = tk.Label(canvas,image=column_1_img)
column_label_1.image = column_1_img
column_label_1.place(relheight=1,relwidth=0.2)

root.mainloop()

代码产生此输出Not fullscreen Fullscreen

我想要一个图像自动调整到标签大小,那么你有什么想法吗?

解决方法

<Configure> 绑定到事件处理程序并使用 PIL 的 resize 方法调整图像大小。

这是一个例子:

import tkinter as tk
from PIL import ImageTk,Image

def resize_image(event):
    column_label_1.resized = ImageTk.PhotoImage(column_1_img.resize((event.width,event.height),resample = Image.NEAREST))
    column_label_1['image'] = column_label_1.resized

HEIGHT,WIDTH = 640,700
root = tk.Tk()
canvas0 = tk.Canvas(height=HEIGHT,width=WIDTH)
canvas0.pack()

canvas = tk.Canvas(bg='black')
canvas.place(relx=0,rely=0,relheight=1,relwidth=1)

frame = tk.Frame(canvas,bg='#009900')
frame.place(relx=0.12,y=2,relwidth=0.75,relheight=1)

column_1_img = Image.open(r'img_path')
column_img = ImageTk.PhotoImage(column_1_img)

column_label_1 = tk.Label(canvas,image=column_img)
column_label_1.image = column_1_img
column_label_1.place(relheight=1,relwidth=0.2)
column_label_1.bind('<Configure>',resize_image)

root.mainloop()