Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Не отображается изображение в Label

#python #python_3x #tkinter


Разрабатываю своё первое оконное приложение, и вот столкнулся с проблемой. Я вызываю
функцию с параметром и в зависимости от параметра в 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('', eclick)


root = Tk()
edscr()

root.mainloop()

    


Ответы

Ответ 1



Как прокомментировал @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()

Комментариев нет:

Отправить комментарий