2016-09-14 10 views
2

это мой первый код программирования на питоне. Я пытаюсь изменить изображение одним нажатием кнопки. У меня есть 2 кнопки, Начать разговор & Остановить разговор.Изменение изображения при нажатии кнопки

Когда форма загружается, изображения нет. когда нажата кнопка Начать, появится изображение ABC. Когда нажата кнопка Stop, должно отображаться изображение xyz.

Проблема, с которой я столкнулся, когда я нажимаю кнопку «Пуск», появляется соответствующее изображение, но когда я нажимаю «Стоп», появляется новое изображение, но предыдущее изображение не исчезает. Оба изображения отображаются один за другим

Мой код ниже

root = Tk() 
prompt = StringVar() 
root.title("AVATAR") 
label = Label(root, fg="dark green") 
label.pack() 

frame = Frame(root,background='red') 
frame.pack() 

Определение функции

def Image1(): 
    image = Image.open("C:\Python27\Agent.gif") 
    photo = ImageTk.PhotoImage(image) 
    canvas = Canvas(height=200,width=200) 
    canvas.image = photo # <--- keep reference of your image 
    canvas.create_image(0,0,anchor='nw',image=photo) 
    canvas.pack() 

def Image2(): 
    image = Image.open("C:\Python27\Hydrangeas.gif") 
    photo = ImageTk.PhotoImage(image) 
    canvas = Canvas(height=200,width=200) 
    canvas.image = photo # <--- keep reference of your image 
    canvas.create_image(0,0,anchor='nw',image=photo) 
    canvas.pack() 

#Invoking through button 
TextWindow = Label(frame,anchor = tk.NW, justify = tk.LEFT, bg= 'white', fg = 'blue', textvariable = prompt, width = 75, height=20) 
TextWindow.pack(side = TOP) 

conversationbutton = Button(frame, text='Start Conversation',width=25,fg="green",command = Image1) 
conversationbutton.pack(side = RIGHT) 

stopbutton = Button(frame, text='Stop',width=25,fg="red",command = Image2) 
stopbutton.pack(side = RIGHT) 

root.mainloop() 
+0

Hi user6829070, Вы заметили ответ? Пожалуйста, укажите. –

ответ

2

Наиболее важный вопрос заключается в том, что вы не очистить холст перед созданием нового образа , Начните свои (кнопки) функции с:

canvas.delete("all") 

Однако, то же самое касается и вашего холста; вы продолжаете создавать его. Лучше разделить создание холста и настройки изображения:

from Tkinter import * 

root = Tk() 
prompt = StringVar() 
root.title("AVATAR") 
label = Label(root, fg="dark green") 
label.pack() 

frame = Frame(root,background='red') 
frame.pack() 

# Function definition 

# first create the canvas 
canvas = Canvas(height=200,width=200) 
canvas.pack() 

def Image1(): 
    canvas.delete("all") 
    image1 = PhotoImage(file = "C:\Python27\Agent.gif") 
    canvas.create_image(0,0,anchor='nw',image=image1) 
    canvas.image = image1 

def Image2(): 
    canvas.delete("all") 
    image1 = PhotoImage(file = "C:\Python27\Hydrangeas.gif") 
    canvas.create_image(0,0,anchor='nw',image=image1) 
    canvas.image = image1 

#Invoking through button 
TextWindow = Label(frame,anchor = NW, justify = LEFT, bg= 'white', fg = 'blue', textvariable = prompt, width = 75, height=20) 
TextWindow.pack(side = TOP) 

conversationbutton = Button(frame, text='Start Conversation',width=25,fg="green",command = Image1) 
conversationbutton.pack(side = RIGHT) 

stopbutton = Button(frame, text='Stop',width=25,fg="red",command = Image2) 
stopbutton.pack(side = RIGHT) 

root.mainloop() 

Это также предотвращает несколько странное расширение окна на нажатие кнопки. Чтобы сделать код подходящим для python3, заменить from Tkinter import* на from tkinter import*

+0

Большое вам спасибо. После установки canvas.delete («все»), теперь он отлично работает. Еще раз спасибо :) – user6829070

+0

Sure Jacob. Я принял его, выполнив шаги, упомянутые выше, спасибо еще раз – user6829070

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