Не отображается изображение в Label Python3 (Tkinter)

238 просмотра
0
0 Комментариев

введите сюда описание изображенияРазрабатываю своё первое оконное приложение, и вот столкнулся с проблемой. Я вызываю функцию с параметром и в зависимости от параметра в Label должно выводиться разное изображение. Но вместо этого просто серый экран, изображения на кнопке тоже нет, но свою функцию кнопка исправно выполняет. Что с этим делать ума не приложу раньше все работало нормально. Заранее спасибо

from tkinter import *
 
 
def eclick(event):
   root.destroy()
 
def edscr():
 
    e_sc_1 = PhotoImage(file='e_scr_1.png')
    e_scr_1 = Label(root, image=e_sc_1)
    e_scr_1.place(x=0, y=0)
 
    e_but = PhotoImage(file='but_e.png')
    but_e = Button(root, width=477, height=16, image=e_but)
    but_e.place(x=130, y=350)
    but_e.bind('<Button-1>', eclick)
 
 
root = Tk()
edscr()
 
root.mainloop()


Добавить комментарий

1 Ответы

Python Опубликовано 12.12.2018
0

Как прокомментировал @jfs «ссылку на изображение следует сохранять» по этому в данном ответе весь объект Tk помещен в class пример кода, а само изображение помещено в переменную self.image т.е. вы присваиваете изображение в блок класса:

import tkinter
 
 
class Ex(tkinter.Tk):
    def __init__(self):
        super().__init__()
        self.image = tkinter.PhotoImage(file='2.gif')
        label = tkinter.Label(self, image=self.image)
        label.pack()
 
 
if __name__ == "__main__":
    main = Ex()
    main.mainloop()

введите сюда описание изображения


Для того чтобы использовать другие виды расширения используйте библиотеку PIL пример:

import tkinter
from PIL import Image, ImageTk
 
class Ex(tkinter.Tk):
    def __init__(self):
        super().__init__()
        pil_image = Image.open("2.jpg")
        self.image = ImageTk.PhotoImage(pil_image)
        image_sprite = tkinter.Label(self, image=self.image)
        image_sprite.pack()
 
 
if __name__ == "__main__":
    main = Ex()
    main.mainloop()

введите сюда описание изображения

Так же можно поместить изображение в глобальную переменную в функции, но лучше через class

import tkinter
 
 
def main():
    global image
    image = tkinter.PhotoImage(file='2.gif')
    label = tkinter.Label(root, image=image)
    label.pack()
 
 
root = tkinter.Tk()
main()
root.mainloop()

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up