Нажатие 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()


