объект холста tkinter tag_bind - PullRequest
0 голосов
/ 27 мая 2018

Я не могу понять, почему я не получаю реакцию на tag_bind в приведенном ниже коде: просто хочу получить дескриптор tag_bind, чтобы позже подробно остановиться на обработчике событий.Ничего не происходит, и Ткинтер тоже не жалуется.Спасибо за помощь.

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 голосов
/ 27 мая 2018

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

Вторая проблема заключается в том, что единственные элементы на холсте, которые могут принимать фокус клавиатуры, - это текстовые элементы.,Невозможно прикрепить события клавиатуры к отдельным элементам холста, кроме текстовых объектов.Если вы хотите, чтобы нетекстовые объекты реагировали на привязки клавиш, вы должны поместить привязки на холст в целом, а затем дать холсту фокус клавиатуры.

...