我想使用枕头在Tkinter中动态显示图像

时间:2019-04-11 16:54:48

标签: python-3.x tkinter python-imaging-library

我希望能够在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 个答案:

答案 0 :(得分:1)

这应该有效

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语句引起了一些麻烦,您必须始终检查一段时间是否会有有效的代码

如果要显示图像,则必须始终对其进行固定引用,最好的方法是将其添加到列表中