2013-04-22 2 views
3

Итак, ребята, я новичок в GUI в Python, и я пытался понять процесс envents, вот мой код и намерение, что всякий раз, когда я нажимаю клавишу 'a', он должен печатать " ключ прессованный. Но это не будет работать для меня.Связывание событий Python с tkinter

#!/usr/bin/env python3 
# -*-coding:UTF-8 -* 

from tkinter import * 

root = Tk() 

def callback(event): 
    print("key pressed") 

canvas = Canvas(root, width=100, height=100, bg='blue') 
canvas.bind("a", callback) 
canvas.pack() 

root.mainloop() 

ответ

4

он не выполняет функцию обратного вызова, поскольку в центре внимания программы находится на Tk элемента. Если заменить эту строку с root.bind("a", callback), это будет работа, как вы ожидаете.

Проблема заключается в том, что элемент canvas не получает фокус, когда вы нажимаете на него, как другие виджеты, как Entry, поэтому он будет реагировать только на события смены ключа, если вы вызываете первый canvas.focus_set().

+1

Обратите внимание, что вы также можете связать '<1>', чтобы сделать 'focus_set', что позволит вам щелкнуть по холсту, а затем ввести символ. –