Проблемы с добавлением изображений в графический интерфейс с помощью tkinter - PullRequest
0 голосов
/ 20 мая 2018

ОК, поэтому я пытаюсь создать программу, которая отображает изображение при нажатии кнопки, и у меня возникают проблемы с загрузкой изображений в программу. Это мой полный код:

# Nicolas Bart
import tkinter as tk
from PIL import Image, ImageTk

from tkinter import *

window = tk.Tk()
window.title('Bad Meme Generator')
window.geometry('500x500')
window.configure(bg='saddle brown')

meme_label = tk.Label(window, text='PRESS BUTTON FOR BAD MEMES:', 
fg='blue4', bg='brown4', font=('comicsans', '20'))
meme_label.grid(pady=25, padx=25, column=0, row=0)


def button_command():
    meme_window = tk.Tk()
    meme_window.title('I Warned You')
    meme_window.grid()

image = Image.open('pexels-photo-247932.jpg')
photo = ImageTk.PhotoImage(image)


label = tk.Label(meme_window, image=photo)
label.image = photo
label.place(x = 0, y = 0)


button = tk.Button(window, text='Dont Do It!', command=button_command, 
padx=100, pady=75, font=('comicsans', '20'),
               bg='brown4', fg='blue4')
button.grid(column=0, row=1)

warning_label = tk.Label(window, text="Really shit tier memes incoming:", 
bg='brown4', fg='blue4',
                         font=('comicsans', '20'))
warning_label.grid(pady=75)

window.mainloop()

каждый раз, когда яЗапустите эту программу, когда я нажимаю кнопку, чтобы открыть изображение, она выдает ошибку «AttributeError: тип объекта« Изображение »не имеет атрибута« открыть »»

определенная часть программы, которая дает ошибкуэто:

def button_command():
    meme_window = tk.Tk()
    meme_window.title('I Warned You')
    meme_window.grid()

    image = Image.open('pexels-photo-247932.jpg')
    photo = ImageTk.PhotoImage(image)


    label = tk.Label(meme_window, image=photo)
    label.image = photo
    label.place(x = 0, y = 0)

любая помощь будет оценена.Спасибо:)

1 Ответ

0 голосов
/ 21 мая 2018

Это хороший пример того, почему вы не должны делать from tkinter import *.Tkinter имеет класс Image, поэтому, выполняя импорт после импорта Image из PIL, вы перезаписываете класс PIL классом tkinter.

Поскольку вы уже импортируете tkinter предпочтительным способом (import tkinter as tk), вам не нужно импортировать tkinter во второй раз.Вам необходимо удалить заявление from tkinter import *.

Вы также допустили ошибку, создав несколько экземпляров Tk.Я не знаю, способствует ли это проблеме или нет, но это не то, что вы должны делать.Если вам нужны дополнительные окна, вам следует создать экземпляры Toplevel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...