Запрограммировать кнопку на языке питон
Я создаю программу на языке питон, где при нажатии кнопки меняется изображение. Я добавил изображения и кнопку, при нажатии которой будет меняться изображение. Теперь я столкнулся с проблемой. Я не понимаю как запрограммировать кнопку так, чтобы при нажатии на неё, картинка менялась. Кто шарит, может помочь? Вот код, который я написал:
import tkinter as tk
root = tk.Tk ()
root.title("Эмблемы")
root.geometry("600x400+500+200")
label_1 = tk.Label()
img_1 = tk.PhotoImage(file="Без-имени-1.gif")
img_2 = tk.PhotoImage(file="вариант-2.gif")
img_3 = tk.PhotoImage(file="Вариант-3.gif")
logo_label = tk.Label(image=img_1)
logo_label.pack()
click_button = tk.Button(root, text='Вперёд', bg='black', fg='white', width=15,font=('Comic Sans MS', 14))
click_button.pack()
click_button = tk.Button(root, text='Назад', bg='black', fg='white', width=15,font=('Comic Sans MS', 14))
click_button.pack()
root.mainloop()
Наверное, таки уже пора почитать документацию по Tkinter? Там же есть исчерпывающее описание работы с кнопками. Как и в первой главе про идеологию самого модуля.
Вот это всё бред:
click_button = tk.Button(root, text='Вперёд', bg='black', fg='white', width=15,font=('Comic Sans MS', 14))
click_button.pack()
click_button = tk.Button(root, text='Назад', bg='black', fg='white', width=15,font=('Comic Sans MS', 14))
click_button.pack()
click_button - название объекта(виджета). Во-первых это название конкретной кнопки и оно тут зачем-то переприсвоено. Обратиться к первой кнопке (которая "Вперед") больше нельзя. И само выражение click_button - это скорее название функции, которую должна вызывать кнопка, а не её имя.
Т.е. кнопки создаются вот так:
#Сначал создаём функции, которые будет срабатывать при нажатиях.
def click_next():
pass
def click_prev():
pass
#Затем создаём объекты кнопок, давая ссылку на функции
btn_next = tk.Button(root, text='Вперёд', command = click_next)
btn_prev = tk.Button(root, text='Назад', command = click_prev)
#А потом кнопки размещаем.
btn_next.pack()
btn_prev.pack()
И вот при такой структуре уже из функции можно обратить к свойствам объектов, включая сами кнопки.
В итоге всё вместе будет как-то так (тут кнопка Next) случайно меняет изображения. Кнопка Prev ничего не делает:
from tkinter import *
from random import choice
images = ['black.png','red.png','green.png']
def click_next():
img['file'] = choice(images) #Заменяет файл объекта img на случайный из списка images
def click_prev():
pass
#Создали окно
root = Tk ()
root.title("Name")
root.geometry("600x400+500+200")
#Создали ОДИН объект img и поместили его в label
img = PhotoImage(file='black.png')
img_label = Label(image = img)
#Создали объекты кнопок и прописали им функции
btn_next = Button(text='Next', command = click_next) #Если окно одно, то root не нужен.
btn_prev = Button(text='Prev', command = click_prev)
#Поместили все объекты в окно
btn_next.pack(side = RIGHT)
btn_prev.pack(side = LEFT)
img_label.pack()
root.mainloop()
И всё это есть в любом гайде по Tkinter. Собственно.. я, например, это всё выяснил вчера, когда просто прочитал руководство.