tkinter canvas对象tag_bind

时间:2018-05-26 23:06:19

标签: object canvas tkinter tags bind

我无法理解为什么我对下面的代码中的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()

1 个答案:

答案 0 :(得分:0)

“键盘焦点”允许tkinter知道将关键事件发送到哪个对象。默认情况下,画布上的项目没有键盘焦点。所以,第一个问题是你的椭圆将看不到键释放,因为它没有键盘焦点。

第二个问题是画布上可以接受键盘焦点的唯一项目是文本项目。将键盘事件附加到除文本对象之外的单个画布项是不可能的。如果希望非文本对象对键绑定做出反应,则必须将绑定作为整体放在画布上,然后为画布指定键盘焦点。