Смена изображения на нажатие кнопки
Помогите, пожалуйста. Использую изображения вместо кнопки, которая реализована через Label. Как сделать эффект клика, чтобы при нажатии кнопки первое изображение менялось на второе, и при отпускании кнопки оно возвращалось к первому? На данный момент в def происходит смена изображения и дальше кнопка зависает нажатой (второе изображение) и не нажимается.
import random
import textwrap
import tkinter as tk
from PIL import ImageTk, Image
from tkinter import messagebox
list = ['Text1', 'Text2', 'Text3']
def self(output):
text = random.choice(list)
msg = textwrap.fill(text, width=38)
canvas.itemconfigure(id, text=msg)
button2 = tk.Label(canvas, image=button_active)
canvas.create_window(145, 47, width=130, height=60, anchor="nw", window=button2)
def on_closing():
if messagebox.askokcancel('Выход из приложения', 'Хотите выйти из приложения?'):
root.destroy()
path = 'background.jpg'
root = tk.Tk()
root.protocol("WM_DELETE_WINDOW", on_closing)
root.title('name')
root.iconbitmap('icon.ico')
root.resizable(0, 0)
root.wm_attributes('-topmost', 1)
image = Image.open(path)
width = 420
height = 240
image = image.resize((width, height), Image.ANTIALIAS)
image = ImageTk.PhotoImage(image)
button_image = ImageTk.PhotoImage(file='btn.png')
button_active = ImageTk.PhotoImage(file='btn_a.png')
canvas = tk.Canvas(root, width=width, height=height)
canvas.pack(side="top", fill="both", expand="no")
canvas.create_image(0, 0, anchor="nw", image=image)
button = tk.Label(canvas, image=button_image)
button.bind('<Button-1>', self)
id = canvas.create_text(210, 175, text="", font='Georgia 14', justify='center')
canvas.create_window(145, 47, width=130, height=60, anchor="nw", window=button)
root.mainloop()
Ответы (1 шт):
Вы в функции def self(output): создаёте метку button2 поверх метки button, поэтому она и перестает работать. Вам надо просто сменить изображение в метке командой button.config(image=button_active). Для возвращения изображения, нужно добавить обработчик события отпускания кнопки мыши button.bind('<ButtonRelease-1>', selfrel) и добавить функцию def selfrel(event): которая вернет изображение обратно button.config(image=button_image).