Я не могу загрузить фото, когда нажимаю кнопку - PullRequest
0 голосов
/ 01 августа 2020
from tkinter import *
from PIL import ImageTk
import glob

def selection():
    global picTk
    picTk = Toplevel()
    picTk.title('Photos')
    picTk.geometry('800x600')
    global photoimage_list
    photoimage_list = []
    for filepath in glob.glob('photos/*.gif'):
        im = Image.open(filepath)
        pic = ImageTk.PhotoImage(image=im)
        photoimage_list.append(pic)

    global lb1
    global back_btn
    global exit_btn
    global for_btn

    n = 0
    img_show = photoimage_list[n]
    lb1 = Label(picTk,image=img_show)
    lb1.image = img_show
    lb1.place(x=10,y=10)

    back_btn = Button(picTk,text='<<',command=lambda:back(n),state=DISABLED)
    back_btn.place(x=50,y=550)

    exit_btn = Button(picTk,text='Exit',command=picTk.destroy)
    exit_btn.place(x=350,y=550)

    for_btn = Button(picTk,text='>>',command=lambda:forward(n),state=NORMAL)
    for_btn.place(x=650,y=550)
    picTk.mainloop()

def back(n):
    lb1.grid_forget()
    minus1 = photoimage_list[n-1]
    lb1.configure(image=minus1)
    lb1.image = minus1
    for_btn.configure(state=NORMAL,command=lambda:forward(n+1))
    back_btn.configure(state=NORMAL,command=lambda:back(n-1))
    lb1.place(x=10,y=10)
    back_btn.place(x=50,y=550)
    exit_btn.place(x=350,y=550)
    for_btn.place(x=650,y=550)
    if minus1 == photoimage_list[0]:
        back_btn.configure(state=DISABLED)

def forward(n):
    lb1.grid_forget()
    next2 = photoimage_list[n+1]
    lb1.configure(image=next2)
    lb1.image = next2
    for_btn.configure(state=NORMAL,command=lambda:forward(n+1))
    back_btn.configure(state=NORMAL,command=lambda:back(n-1))
    lb1.place(x=10,y=10)
    back_btn.place(x=50,y=550)
    exit_btn.place(x=350,y=550)
    for_btn.place(x=650,y=550)
    if next2 == photoimage_list[-1]:
        for_btn.configure(state=DISABLED)


tk = Tk()
tk.title('Home')

Label(tk,text='Photos of Dominic').pack(pady=10)
Button(tk,text='View Album',command=selection).pack(pady=10)


Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python38\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "E:\Python\Python Projects Fun\photo_album.py", line 13, in selection
    im = Image.open(filepath)
AttributeError: type object 'Image' has no attribute 'open'


    
    

Я изменил на glob.glob('photos/*.gif'), чтобы указать файлы с форматом gif внутри папки «фотографии», но, тем не менее, я все еще получаю ошибку, что фотографии не могут быть загружены в новом окне. Я хотел бы спросить, чего не хватает, чтобы показать фотографию после того, как я нажал кнопку? Есть ли проблемы на линии im = Image.open(filepath), которые нужно изменить? Потому что я уже пишу pic = ImageTk.PhotoImage(image=im).

...