#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()
Комментариев нет:
Отправить комментарий