пустой графический интерфейс с слайд-шоу изображений Python - PullRequest
0 голосов
/ 18 февраля 2012

У меня проблемы с отображением изображений во время слайд-шоу.Когда первые четыре строки update_image закомментированы, отображается первое изображение (1.png).Но когда это не прокомментировано, я получаю пустой графический интерфейс.У кого-нибудь есть предложения?

    import Tkinter
    import Image, ImageTk

    class App():
        def __init__(self):
            self.root = Tkinter.Tk()
            image1=Image.open('C:\Users\Jason\Desktop\ScreenShots\\1.png')
            self.root.geometry('%dx%d' % (image1.size[0],image1.size[1]))
            tkpi=ImageTk.PhotoImage(image1)
            label_image=Tkinter.Label(self.root, image=tkpi)
            label_image.place(x=0,y=0,width=image1.size[0],height=image1.size[1])

            self.update_image()
            self.root.mainloop()


        def update_image(self):
            image1=Image.open('C:\Users\Jason\Desktop\ScreenShots\\2.png')
            tkpi=ImageTk.PhotoImage(image1)
            label_image=Tkinter.Label(self.root, image=tkpi)
            label_image.place(x=0,y=0,width=image1.size[0],height=image1.size[1])

            print 'slide'
            self.root.after(500, self.update_image)

    app=App()

1 Ответ

1 голос
/ 25 февраля 2012

Вероятно, происходит то, что ваш объект изображения собирает мусор, поскольку он является локальным для области действия update_image. Попробуйте сохранить объект изображения как свойство класса (например: self.tkpi)

Кстати - если вы делаете слайд-шоу, где вы показываете одно изображение за раз, нет никакой причины создавать новый ярлык каждый раз, когда вы создаете новое изображение. Достаточно создать новое изображение, а затем назначить его существующему изображению этикетки.

Я также рекомендую использовать grid или pack вместо place. place полезен в некоторых случаях, но обычно лучше использовать два других менеджера геометрии.

...