Sterowanie klawiaturą z pomocą Tkinter key events



Rozwijając swoje projekty dochodzimy do momentu kiedy chcemy móc sterować nimi za pomocą klawiatury komputera. Jest to możliwe m.in. dzięki bibliotece Tkinter, która obsługuje tzw. key event'y czyli zdarzenia na klawiaturze.

Nie ma tu zbyt dużej filozofii, trzeba tylko umiejętnie wkomponować poniższy kod do naszego programu.


import Tkinter as tk	# importujemy bibliotekę Tkinter

def keycodess(event):				# funkcja do rozpoznawania klawiszy
	if event.keysym == 'Escape':	# w przypadku naciśnięcia Escpae, program się wyłącza
		root.destroy()
	if event.keysym == 'Up':		# rozpoznanie strzałki do góry
		print 'góra'
	elif event.keysym == 'Down':
		print 'doł'
	elif event.keysym == 'Left':
		print 'lewo'
	elif event.keysym == 'Right':
		print 'prawo'
		
	x=event.char	# zapisanie do zmiennej x znaku przypisanego do dowolnego klawisza
	
	if x == 'a':	
		print 'litera a'
	elif x == 'b':
		print 'litera b'
	elif x == '1':
		print 'cyfra 1'
root=tk.Tk()
root.bind_all('Key>',keycodess)
root.mainloop()



W przedostatniej linijce kodu brakuje otwarcia nawiasu trójkątnego przed słowem Key. Niestety uzupełniając ten nawias, słowo Key znikało z kodu, traktujac je jako jakąś wewnętrzną komendę.

A teraz kod, ktróy rozróżnia przyciśnięcie i puszczenie klawisza.

import Tkinter as tk
	
def keyPressed(event):
    if event.keysym == 'Up':
        print 'nacisnieto strzalke do gory'
		
    if event.keysym == 'Down':
		print 'nacisnieto strzalke w dół'

def keyReleased(event):
    print ' puszczono klawisz'
   
root=tk.Tk()
print 'nacisnij'

root.bind_all('Key>',keyPressed)	# przed slowem Key należy otworzyć nawias trójkątny
root.bind_all('KeyRelease>',keyReleased)	# przed slowem KeyRelease należy otworzyć nawias trójkątny
root.mainloop()
I to tyle. Jak pisałem powyżej, trzeba jedynie umiejętnie to wkomponować do waszego kodu.

:)