2015-03-01 7 views
1

Ну, у меня возникла «небольшая» проблема с обновлением метки с помощью Tkinter и PIL.Обновление метки Tkinter с изображением

Как только я нажимаю сыр Кнопка должна отображать foo2, но она просто отображает белый экран. Какие-либо предложения?

Вот мой код:

from PIL import Image as Im 
from Tkinter import * 

class MyWindow(): 

    def __init__(self): 
     self.root = Tk() 

     self.maskPng = Im.open("foo.png") 
     self.maskPng.convert("RGBA") 
     self.maskPng.save("bar.gif", "GIF") 

     self.mask = PhotoImage(file = "bar.gif") 

     self.show = Label(self.root, image = self.mask).pack(side = "left") 

     self.speedBTN = Button(self.root, text = "cheese", command = self.speed).pack(side = "right") 

     self.changed = False 


    def speed(self): 
     self.speedImg = Im.open('foo2') 
     self.speedImg = self.speedImg.convert("RGBA") 

     # overlaying foo and foo2 -- it works I tested it 
     self.maskPng.paste(self.speedImg, (0,0), self.speedImg) 


     self.render() 

    def render(self): 
     self.mask = PhotoImage(self.speedImg) 
     self.show.configure(image = self.mask) 
     self.show.image = self.mask 

    def draw(self): 
     self.root.mainloop() 


    main = MyWindow() 
    main.root.mainloop() 
+1

Ваш отпечаток выглядит неправильно. И почему вы запускаете mainloop в цикле? Это совершенно не имеет никакого смысла. mainloop - это уже бесконечный цикл, не помещая его в другой бесконечный цикл. –

+0

извините ошибку форматирования в переполнении стека. Я установил главную опцию. Все еще не работает –

+0

Ваше форматирование по-прежнему выглядит странно. Является ли 'self.maskPng = Im.open (" foo.png ")' предположительно вне '__init__'? Это очень необычный способ создания графического интерфейса. –

ответ

0

Ну, я думаю, что причина в том, что self.showNone при нажатии на кнопку. Это происходит потому, что эта линия:

self.show = Label(self.root, image = self.mask).pack(side = "left") 

должен быть:

self.show = Label(self.root, image = self.mask) 
self.show.pack(side = "left") 

Это происходит потому, что pack, grid и т.д. вернуться None.

Смежные вопросы