Egér és billentyűzet használata

2019.11.11

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+5
0, 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)

© 2023 Minden jog fenntartva.
Az oldalt a Webnode működteti
Készítsd el weboldaladat ingyen! Ez a weboldal a Webnode segítségével készült. Készítsd el a sajátodat ingyenesen még ma! Kezdd el