2013-10-09 5 views
1

У меня есть этот код, который должен запускаться при нажатии соответствующей кнопки, но ничего не происходит. Почему это должно быть?Отслеживание нажатия клавиш в python

def keyReleased(self,event): 
    if event.keysym == 'Right': 
     self.move('Right') 
    elif event.keysym == 'Left': 
     direction= self.move('Left') 
    elif event.keysym == 'Up': 
     self.move('Up') 
    elif event.keysym =='Down': 
     self.move('Down') 
    elif event.keysym =='Escape': 
     self._root.destroy() 
+0

Нет, я не знал, что нужно было сделать это – user2330621

+0

Так что я должен сделать что-то вроде ' root.bind ('Right', self.keyReleased) '? – user2330621

+0

Код, который запускается, в настоящее время не работает, так как я все еще пытаюсь это исправить. Но кнопки в целом даже не запускали код ниже. – user2330621

ответ

1

Вы должны связать ключевое событие с обратным вызовом.

Например:

from Tkinter import * # Python 3.x: from tkinter import * 

def hello(e=None): 
    print('Hello') 

root = Tk() 
Button(root, text='say hello', command=hello).pack() 
root.bind('<Escape>', lambda e: root.quit()) 
root.bind('h', hello) 
root.mainloop() 
+0

Краткое описание: О внесении изменений в Python 3.x в том, что импорт имеет строчный регистр: 'from tkinter import *' –

1

bind_all это один из способов сделать это. Обратите внимание, что клавиши со стрелками находятся под категорией «специальный ключ» для кода ниже.

try: 
     import Tkinter as tk  ## Python 2.x 
    except ImportError: 
     import tkinter as tk  ## Python 3.x 

    def key_in(event): 
     ##shows key or tk code for the key 
     if event.keysym == 'Escape': 
      root.quit() 
     if event.char == event.keysym: 
      # normal number and letter characters 
      print'Normal Key', event.char 
     elif len(event.char) == 1: 
      # charcters like []/.,><#$ also Return and ctrl/key 
      print('Punctuation Key %r (%r)' % (event.keysym, event.char)) 
     else: 
      # f1 to f12, shift keys, caps lock, Home, End, Delete ... 
      print('Special Key %r' % event.keysym) 

    root = tk.Tk() 
    tk.Label(root, text="Press a key (Escape key to exit):").grid() 

    ent=tk.Entry(root) 
    ent.bind_all('<Key>', key_in) # <================== 
    ent.focus_set() 

    root.mainloop() 

Но если вы хотите только клавиши со стрелками, то вы можете связать каждый из них с функцией

def arrow_down(event): 
     print "arrow down" 

    def arrow_up(event): 
     print "arrow up" 

    root = tk.Tk() 
    tk.Label(root, text="Press a key (Escape key to exit):").grid() 

    root.bind('<Down>', arrow_down) 
    root.bind('<Up>', arrow_up) 

    root.mainloop() 
Смежные вопросы