Top.Mail.Ru
Ответы

Запрограммировать кнопку на языке питон

Я создаю программу на языке питон, где при нажатии кнопки меняется изображение. Я добавил изображения и кнопку, при нажатии которой будет меняться изображение. Теперь я столкнулся с проблемой. Я не понимаю как запрограммировать кнопку так, чтобы при нажатии на неё, картинка менялась. Кто шарит, может помочь? Вот код, который я написал:
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? Там же есть исчерпывающее описание работы с кнопками. Как и в первой главе про идеологию самого модуля.

Вот это всё бред:

12345
 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 - это скорее название функции, которую должна вызывать кнопка, а не её имя.

Т.е. кнопки создаются вот так:

1234567891011121314
 #Сначал создаём функции, которые будет срабатывать при нажатиях.
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 ничего не делает:

123456789101112131415161718192021222324252627
 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. Собственно.. я, например, это всё выяснил вчера, когда просто прочитал руководство.