我无法理解为什么我对下面的代码中的tag_bind没有反应:只想获取tag_bind的句柄,以便稍后详细说明事件处理程序。什么都没发生,tkinter也没有抱怨。寻求帮助。
import tkinter as tk
root = tk.Tk()
size = input("Choose a grid size eg. 4, 7, 12 ...: ")
size = int(size)
def create_grid():
d = 20
x0 = 20
x1 = x0 + d
y0 = 20
y1 = y0 + d
for i in list(range(size)):
for j in list(range(size)):
row = i
col = j
id = cv.create_rectangle(x0, y0, x1, y1,
tags="ALL",fill="white")
x0 = x1
x1 += d
x0 = d
x1 = x0 + d
y0 = y1
y1 = y0 + d
id = cv.create_oval(24, 24, 36, 36, tags=("ALL","oval"),fill="yellow")
def oval_move(event):
print(event.keysym)
cv = tk.Canvas(root, bd=5, relief="groove")
cv.pack(fill="both", expand=True)
cv.bind('<Configure>', create_grid())
cv.focus_set() # probably not needed
cv.tag_bind("oval", '<KeyPress-Down>', oval_move)
root.mainloop()
答案 0 :(得分:0)
“键盘焦点”允许tkinter知道将关键事件发送到哪个对象。默认情况下,画布上的项目没有键盘焦点。所以,第一个问题是你的椭圆将看不到键释放,因为它没有键盘焦点。
第二个问题是画布上可以接受键盘焦点的唯一项目是文本项目。将键盘事件附加到除文本对象之外的单个画布项是不可能的。如果希望非文本对象对键绑定做出反应,则必须将绑定作为整体放在画布上,然后为画布指定键盘焦点。