Udalosti (stlačenie tlačítka myši)

Program by mal nejako reagovať na akcie používateľa. Jednou z akcií ktoré môže používateľ vykonať, je kliknutie ľavým, pravým alebo stredným tlačítkom myši.

Vytvorte nasledujúci program:

import tkinter
platno = tkinter.Canvas(width=800,height=600,bg="white")
platno.pack()

def kresli(event):
  print(event.x,event.y)

platno.bind("<Button-1>", kresli)
platno.mainloop()

Keď program spustíte a na klikneme ľavým tlačítkom myši, v okne shell sa vypisujú súradnice x a y miesta, kde sme klikli. Funkcia bind má parametre ktoré tlačítko sme stlačili a aká funkcia sa má vykonať. Ľavé tlačítko je „<Button-1“>, stredné „<Button-2“> a pravé „<Button-3“>.

Udalosť je po anglicky event, hoci vo funkcii bind sme neuviedli parameter event, tento parameter je automaticky vyplnený hodnotamy, ktoré sú s udalosťou spojené. V našom prípade sme použili súradnice myši (v procedúre kresli sme mohli použiť aj iný názov pre udalosť, napríklad názov akcia).

Ak by sme chceli na mieste, kam sme klikli, nakresliť červený kruh,  procedúru kresli môžeme upraviť takto:

def kresli(event):
  platno.create_oval(event.x,event.y,event.x+20,event.y+20,fill="red")

Pokiaľ by sme chceli, aby kruh mal náhodnú veľkosť, prvý riadok programu doplníme o naimportovanie modulu pre prácu so pseudonáhodnými číslami:

import Tkinter,random

a procedúru kresli upravíme takto:

def kresli(event):
  d=random.randrange(5,100)
  platno.create_oval(event.x,event.y,event.x+d,event.y+d,fill="red")

Program vykresľuje kruhy s priemerom od 5 do 99 pixelov.

Podobne by sme mohli náhodne meniť aj iné parametre, ktoré má funkcia create_oval: farbu okraja, hrúbku okraja a tiež by sme mohli náhodne zvoliť, aký geometrický útvar nakreslíme. Nasledujúci program náhodne kreslí kruhy a štvorce:

import tkinter,random
platno = tkinter.Canvas(width=800,height=600,bg="white")
platno.pack()

def bodka(akcia):
  farby=('black','blue','brown','yellow','grey')
  d=random.randrange(5,100)
  farba=random.choice(farby)
  okraj=random.choice(farby)
  tvar=random.randrange(0,2)
  hrubka=random.randrange(0,d//2)
  if tvar==0:
    platno.create_oval(akcia.x,akcia.y,akcia.x+d,akcia.y+d,
    fill=farba,outline=okraj,width=hrubka)
  else:
    platno.create_rectangle(akcia.x,akcia.y,akcia.x+d,akcia.y+d,
    fill=farba,outline=okraj,width=10)

platno.bind("<Button-1>", bodka)
platno.mainloop()

 

print

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *