Egér és billentyűzet használata
Reakció az egér bal gombjára
A programok használatánál hozzá vagyunk szokva, hogy egeret használunk, és klikkeléssel különböző feladatokat tudunk elvégezni. Amikor így interakcióba lépünk a programmal, akkor úgynevezett események jönnek létre, amikre a programban reagálhatunk. A bind utasítással beállíthatjuk, hogy melyik eseményre akarunk reagálni, és ebben a szituációban mit szeretnénk csinálni. Az eseményeknek előre meghatározott neveik vannak, pl klikkelés az egér bal nyomógombjával: <Button-1>. Most létrehozunk egy programot, ami a klikkelés helyére egy kört rajzol ki:
import tkinter
canvas = tkinter.Canvas()
canvas.pack()
def kor(koordinatak):
x = koordinatak.x
y = koordinatak.y
canvas.create_oval(x-5, y-5, x+5, y+5)
canvas.bind('<Button-1>', kor)
A <Button-1> esemény automatikusan információt küld a klikkelés helyéről. Ezt az információt mi elneveztük "koordinatak"-nak, amit a kor utasításunk kap paraméterként. Ez a változó tartalmazza mind az x, mind az y koordinátákat. A könnyebb kezelhetőség és átláthatóság érdekében mi ezeket helyi változókhoz rendeltük hozzá, amiket aztán használunk az eljárásunkban.

Reakció az egér jobb gombjára
Ha az egér jobb gombjával klikkelünk, akkor a <Button-3> esemény történik. A következő program kis köröket rajzol, ha az egér bal gombjával klikkelünk és házat, ha a jobb gombbal.
import tkinter
canvas = tkinter.Canvas()
canvas.pack()
def kor(koordinatak):
x = koordinatak.x
y = koordinatak.y
canvas.create_oval(x-5, y-5, x+5, y+5)
def haz(koordinatak):
x = koordinatak.x
y = koordinatak.y
canvas.create_rectangle(x, y, x+50, y+50)
canvas.create_polygon(x, y, x+25, y-50, x+50, y)
canvas.bind('<Button-1>', kor)
canvas.bind('<Button-3>', haz)
További eseményei az egérnek:
<Motion> - mozgatás
<B1-Motion> - mozgatás közben le van nyomva a bal nyomógomb
<B3-Motion> - mozgatás közben le van nyomva a jobb nyomógomb
<ButtonRelease-1> - bal nyomógomb felengedése
<Double-Button-1> - duplaklikk a bal gombbal
Reakciók a billentyűk leütésére
Billentyűk leütésére a canvas.bind_all('<billentyű>', eljárás) utasítással reagálhatunk. A <billentyű> egy konkrét billentyű a billentyűzetről, pl. 'a', 'f' ... vagy az irányítóbillentyű neve:
<Up> - felfelé nyíl,
<Down> - lefelé nyíl,
<Right> - jobbra nyíl,
<Left> - balra nyíl,
<space> - szóköz,
<Return> - enter (Vigyázz!!! Van <Enter> esemény is, de az másra szolgál!!!)
Az eljárásnak, ami az utasításunkban a második paraméter, kell lennie legalább egy paraméterének, mivel az esemény különböző információkat fog neki küldeni, pl a kurzor helyét - még ha ezt nem is akarjuk használni az eljárásunkban.
A következő program az 'n' lenyomására négyzetet, a 'k' lenyomására kört rajzol:
import tkinter
from random import *
canvas = tkinter.Canvas()
canvas.pack()
def negyzet(esemeny):
x = randrange(300)
y = randrange(250)
canvas.create_rectangle(x, y, x+50, y+50)
def kor(esemeny):
x = randrange(300)
y = randrange(250)
canvas.create_oval(x, y, x+50, y+50)
canvas.bind_all('n', negyzet)
canvas.bind_all('k', kor)
Programjainkba előfordulhat, hogy bármely billentyű leütésére egy eljárással szeretnénk reagálni. Ez az esemény a <Key> nevet viseli. Az eljárásban, amelyet ez az esemény hív a .keysym attribútumon keresztül tudjuk meg, melyik billentyű lett lenyomva. A következő program a lenyomott billentyű betűjét kiírja véletlen helyre:
import tkinter
from random import *
canvas = tkinter.Canvas(width=300, height=300)
canvas.pack()
def irj(esemeny):
print(esemeny.keysym)
x = randrange(300)
y = randrange(300)
canvas.create_text(x, y, text=esemeny.keysym)
canvas.bind_all('<Key>', irj)
