U grafických aplikací je hlavním vstupním zařízením myš nebo dotykový displej, nicméně velice často chceme, aby naše aplikace uměla reagovat na povely z klávesnice. To samozřejmě podporuje i knihovna TKinter. Musíme jen připravit obslužnou rutinu (podprogram), která bude zachytávat události klávesnice a zpracovávat je podle naší potřeby.
Rutiny obsluhující události si převezmou událost jako parametr podprogramu – objekt typu Event. Událost se pak předá jako argument a my můžeme využít její atributy, v tomto případě char, keysym a keycode.
def move(event):
print(event.char, event.keysym, event.keycode)
Stisk každé klávesy pak vygeneruje příslušné kódy, které můžeme při obsluze události využít.
U kurzorových a dalších kláves použijeme spíš atributy keysym nebo keycode, u běžných znaků nám stačí atribut char.
Left 113 Right 114 Up 111 Down 116 a a 38 w w 25
Následně musíme obsluhu události svázat se smyčkou událostí pomocí metody bind:
hlavni_okno.bind("<Key>", move)
Celý program, který bude po ploše přesouvat čtvereček pomocí kurzorových kláves a měnit jeho barvu pomocí písmen u, i a o, pak bude vypadat například následovně:
Program: Pohyb čtverečku pomocí kurzorových šipek
from tkinter import *
hlavni_okno = Tk()
popisek = Label(hlavni_okno, text="GRAFIKA V PYTHONU - Klávesnice")
popisek.pack()
# tvoříme plátno
sirka = 400
vyska = 300
platno = Canvas(hlavni_okno, width=sirka, height=vyska)
platno.pack()
# tvoříme obdélník, který se bude hýbat pomocí kurzorových šipek
x1 = sirka / 2
y1 = vyska / 2
barva = "red"
obd = platno.create_rectangle(x1, y1, x1 + 20, y1 + 20,fill=barva)
# na dané pozici nakreslíme obdélník, ale nejprve ho smažeme
def draw_rect():
global obd # využíváme globální proměnnou, ta si obdélník pamatuje
platno.delete(obd)
obd = platno.create_rectangle(x1, y1, x1 + 20, y1 + 20, fill=barva)
# podprogram, který na základě událostí mění parametry obdélníku
def move(event):
global x1, y1, barva
print(event.char, event.keysym, event.keycode)
if event.keysym == "Left":
x1 -= 10
elif event.keysym == "Right":
x1 += 10
elif event.keysym == "Up":
y1 -= 10
elif event.keysym == "Down":
y1 += 10
elif event.char == "u":
barva = "green"
elif event.char == "i":
barva = "blue"
elif event.char == "o":
barva = "red"
draw_rect()
# svážeme události klávesnice s ovládacím podprogramem
hlavni_okno.bind("<Key>", move)
hlavni_okno.mainloop()

Obsluha událostí klávesnice se odehrává v podprogramu move(). Podprogram podle hodnot atributů události event změní souřadnice našeho čtverečku, případně jeho barvu.
Následně vyvolá jeho překreslení podprogramem draw_rect(), který předcházející obdélník smaže a na nových souřadnicích a se zvolenou barvou nakreslí nový.
Opět, kdybychom zakomentovali příkaz platno.delete(obd) v podprogramu draw_rect(), tak by se místo přesunu obdélníku konala je ho duplikace a program by kreslil cestu obdélníku.
