Нажатие Enter на фигуру в Canvas

Программа должна при нажатии на Enter менять фигуру, но не работает нажатие.

from tkinter import Tk, Canvas

window = Tk()
window.title("Магия клавиш!")
window.geometry("130x130")

canvas = Canvas(width=110, height=110, bg="SlateBlue")
canvas.pack(padx=10, pady=10)
canvas.create_oval((10, 10), (100, 100), fill="Lime", outline="Black", tags="obj")#Аргумент tags=”obj”, нужен для присвоения тега объекта, для подальшего взаимодействия с ним. 
counter = 0

def change(event):#аргумент event, который нужен для того, чтобы мы могли вызвать эту функцию в строке 33
    global counter
    counter += 1

    if counter == 1:
        canvas.delete("obj")
        canvas.create_polygon((10, 100), (55, 10), (100, 100), fill="Yellow", outline="Black", tags="obj")
    elif counter == 2:
        canvas.delete("obj")
        canvas.create_rectangle((10, 10), (100, 100), fill="Red", outline="Black", tags="obj")
    elif counter == 3:
        counter = 0
        canvas.delete("obj")
        canvas.create_oval((10, 10), (100, 100), fill="Lime", outline="Black", tags="obj")

canvas.tag_bind("obj", "<Return>", change)

window.mainloop()

Ответы (1 шт):

Автор решения: S. Nick

Фокус клавиатуры — это то, что позволяет tkinter узнать, на какой объект отправлять ключевые события. По умолчанию элементы на холсте не имеют фокуса клавиатуры. Проблема заключается видимо в том, что ваши фигуры не увидит нажатия клавиши, потому что у них нет фокуса клавиатуры.

Событие, например, ButtonRelease ЛКМ - работает как надо, проверьте.

from tkinter import Tk, Canvas

window = Tk()
window.title("Магия клавиш!")
window.geometry("130x130")

canvas = Canvas(width=110, height=110, bg="SlateBlue")
canvas.pack(padx=10, pady=10)

# Аргумент tags=”obj”, нужен для присвоения тега объекта, для подальшего взаимодействия с ним. 
canvas.create_oval((10, 10), (100, 100), fill="Lime", outline="Black", tags="obj") 
counter = 0

#аргумент event, который нужен для того, чтобы мы могли вызвать эту функцию в строке 33
def change(event):  
    global counter
    counter += 1
    
    if counter == 1:
        canvas.delete("obj")
        canvas.create_polygon((10, 100), (55, 10), (100, 100), fill="Yellow", outline="Black", tags="obj")
    elif counter == 2:
        canvas.delete("obj")
        canvas.create_rectangle((10, 10), (100, 100), fill="Red", outline="Black", tags="obj")
    elif counter == 3:
        counter = 0
        canvas.delete("obj")
        canvas.create_oval((10, 10), (100, 100), fill="Lime", outline="Black", tags="obj")


#canvas.tag_bind("obj", "<Return>", change)
canvas.tag_bind("obj", "<ButtonRelease-1>", change)                                # !!! +++


window.mainloop()

введите сюда описание изображения введите сюда описание изображения введите сюда описание изображения

→ Ссылка