2014-10-27 3 views
0

Как показано ниже, я хочу показать изображение в холсте с помощью tkinter, а при нажатии кнопки - другую фотографию. Но я потерпел неудачу. Первое изображение хорошо видно, но изображение не менялось, когда я нажимаю кнопкуКак изменить изображение в холсте? [Python tkinter]

C = Tkinter.Canvas(top, bg="#fff", height=500, width=600) 

// show image1 in canvas first and it works 
itk = ImageTk.PhotoImage(img1) 
C.create_image(300, 250, image=itk) 
C.pack() 


def changeImage(): 
    // I want to show image2 in canvas, but I fails 
    print 'change image in canvas' 
    itk2 = ImageTk.PhotoImage(img2) 
    C.create_image(300, 250, image=itk2) 

button = Tkinter.Button(top,text='click', command=changeImage) 
button.pack() 


top.mainloop() 

ответ

1

Изменяет один или несколько параметров для всех совпадающих предметов. 1

myimg = C.create_image(300, 250, image=itk) 

def changeImage(): 
    // I want to show image2 in canvas, but I fails 
    print 'change image in canvas' 
    itk2 = ImageTk.PhotoImage(img2) 
    C.itemconfigure(myimg, image=itk2) 
+0

К сожалению, это не сработает после того, как я добавлю, что – user2666750

0

itk2 разрушается только функция выходов (и вы получите синтаксические ошибки на других строках кода). Одно из многих решений - сохранить его вне функции. Рассмотрите этот псевдокод, поскольку у меня нет времени его протестировать.

class ImageTest(): 
    def __init__(self): 
     self.root = tk.Tk() 

     self.root.title('image test') 
     self.image1 = ImageTk.PhotoImage(img1) 
     self.image2 = ImageTk.PhotoImage(img2) 

     self.displayed=True 
     self.panel1 = Tkinter.Canvas(top, bg="#fff", height=500, width=600) 
     self.panel1.create_image(300, 250, image=self.image1) 
     self.panel1.pack() 


     tk.Button(self.root, text="Next Pic", command=self.callback, 
       bg="lightblue").pack() 
     tk.Button(self.root, text="Exit", command=quit, bg="red").pack() 

     self.root.mainloop() 

    def callback(self): 
     if self.displayed: 
      self.panel1["image"]=self.image2 
     else: 
      self.panel1.config(image=self.image1) 
     self.displayed=not self.displayed 

IT=ImageTest() 
Смежные вопросы