Есть ли функция для отображения изображения в tkinter (то есть любого типа файла) и отображения его в виде определенной позиции xy на холсте

#python-3.x #tkinter #python-imaging-library

#python-3.x #tkinter #python-imaging-library

Вопрос:

У меня есть массив путей к изображениям и функция, которая находит пути, связанные с кнопками, на которых я хочу отобразить изображение

Я уже пытался добавить

     file_path = photo.name
    img = Image.open(file_path)
    photo_image = ImageTk.PhotoImage(img)
    tk.Label(window, image=photo_image).pack(side=tk.TOP)
  

для моей функции, но фотографии в конечном итоге получаются слишком большими, и я хочу, чтобы изображения размещались прямо над кнопками, поэтому я знаю точные координаты xy, которые я хочу, чтобы изображения были, мне просто нужен способ получить их там и сделать их меньше

Ответ №1:

Чтобы изменить размер вашего изображения, передайте кортеж размера в пикселях:

 img = Image.open("1.bmp").resize((640, 480))
  

Чтобы разместить ваше изображение прямо над кнопками, вы можете использовать place .

 tk.Label(root, image=photo_image).place(x=0,y=0) #change x and y to your desired value
  

Вы также можете получить текущий loc вашего виджета button, чтобы рассчитать точное местоположение, в котором вам нужна place ваша метка:

 x,y = widget.winfo_x(), widget.winfo_y()
  

Подводя итог:

 import tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()
root.geometry("500x500")

def place_image():
    x, y = button1.winfo_x(), button1.winfo_y()
    tk.Label(root, image=photo_image).place(x=x,y=y 20)

button1 = tk.Button(root,text="Click me",command=place_image)
button1.pack()
img = Image.open("1.bmp").resize((400, 300))
photo_image = ImageTk.PhotoImage(img)

root.mainloop()
  

Ответ №2:

Вы можете разместить метку в определенных координатах пикселей на холсте, используя .place() . Вы также можете определить ширину и высоту метки в пикселях внутри скобок. Поэтому это будет определять ширину и высоту изображения в пикселях.

Например:

 tk.Label(window, image=photo_image).place(x=300, y=400, width=200, height=50)
  

координаты пикселя place () работают так в tkinter (для холста размером 600 на 600 пикселей):

диаграмма

Увеличение координаты X виджета tkinter перемещает его вправо. Увеличение координаты Y виджета tkinter перемещает его вниз.