Я хочу отображать изображение динамически в Tkinter, используя подушку - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу иметь возможность динамически отображать фотографии в Tkinter. У меня есть одна кнопка, которая находит пути к фотографиям, которые я хочу отобразить, и когда я добавляю фотографии, я хочу, чтобы они отображались в верхней части холста

Я уже пытался пройти цикл for после загрузки фотографий, но, похоже, он не выполняет то, что я хочу, и теперь я пытаюсь повторить цикл while, но это не работает. Я сейчас в растерянности. Ниже мой код

import tkinter as tk
from tkinter import filedialog as tkfd
from PIL import ImageTk, Image
import time

photo_name_list = []

def find_photos():
    photo = tkfd.askopenfile()
    photo_name_list.append(photo.name)

window = tk.Tk()
#creates the canvas
canvas = tk.Canvas(window, width = WINDOW_WIDTH,
                   height = WINDOW_HEIGHT, bg="green")
canvas.pack()

b1 = tk.Button(canvas, text="Click me to add 5 photos of yourself",
               height = 5, width = 30, command = find_photos)
canvas.create_window(WINDOW_WIDTH//3, WINDOW_HEIGHT//3, window = b1)
while True:
    if len(photo_name_list) > 0:
        for image in photo_name_list:
            img = Image.open(image)
            tkimage = ImageTk.PhotoImage(img)
            tk.Label(window, image=tkimage).pack()
    canvas.update()
    time.sleep(1/60)






window.mainloop()

Итак, как вы можете видеть в коде, у меня есть одна кнопка, которая берет путь к изображению в виде строки и добавляет его в список. Я хочу отображать фотографии по мере их добавления.

1 Ответ

1 голос
/ 11 апреля 2019

Это должно работать

import tkinter as tk
from tkinter import filedialog as tkfd
from PIL import ImageTk, Image
import time
WINDOW_WIDTH = 500
WINDOW_HEIGHT = 500
phat_list = []
images_reference_list = []

def find_photos():
    photo = tkfd.askopenfile()

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

    phat_list.append(file_path)

window = tk.Tk()
#creates the canvas
canvas = tk.Canvas(window, width = WINDOW_WIDTH,
                   height = WINDOW_HEIGHT, bg="green")
canvas.pack(side=tk.BOTTOM)

b1 = tk.Button(canvas, text="Click me to add 5 photos of yourself",
               height = 5, width = 30, command = find_photos)
canvas.create_window(WINDOW_WIDTH//3, WINDOW_HEIGHT//3, window = b1)


window.mainloop()

Я добавил строки кода, которые отображают фотографию внутри функции find_photos().

Оператор while вызывал некоторые проблемы, которые я предполагаю, вы всегда должны проверять, закончится ли время когда-либо, чтобы иметь рабочий код

, и если вы хотите отобразить изображение, вы всегда должны иметь твердую ссылку на него, лучший способ - добавить его всписок

...