Ngjarjet e mouse

Në shembullin “ndërprerës” kemi treguar se si mund të reagojmë në një program kur përdoruesi shtyp një buton të mouse. Edhe pse për përdoruesit një klik duket si një veprim i vetëm, kemi parë që për kompjuter është një sekuencë ngjarjesh që fillon me një ngjarje të tipit pg.MOUSEBUTTONDOWN.

Në shembujt dhe detyrat e mëposhtme, ne do të përdorim tre lloje të ngjarjeve të krijuara nga mouse:

Objektet e ngjarjes, lloji i të cilave është pg.MOUSEBUTTONDOWN gjithashtu përmbajnë disa informacione shtesë, siç janë:

Disa nga të dhënat shtesë të ngjarjeve të përfshira në pg.MOUSEMOTION objektet e ngjarjes janë:

Klikoni në përpunim - ushtrime

Ndoshta nuk keni vërejtur që në programin “switch” nga mësimi i kaluar, drita mund të ndizet dhe fiket duke klikuar ndonjë buton të mouse. Kjo për shkak se i njëjti lloj ngjarje gjenerohet për secilën buton të miut, dhe ne nuk kemi kontrolluar se cili buton është shtypur kur ndodhi ngjarja.

Detyrë - butoni i majtë si ndërprerës:

     Kopjoni programin “kaloni” këtu, pastaj modifikoni atë në mënyrë që drita të ndizet dhe fiket vetëm me butonin e majtë të mouse.

Ndihmë: Përdor të dhënat e event.button.

Detyrë - tre ndërprerës:

     Përdorni pjesë të programit “kaloni” dhe krijoni një program që simulon punën e tre çelësave, siç tregohet në shembull.

../_images/Shema3_Off.png ../_images/Shema3_On.png ../_images/SwitchOff.png ../_images/SwitchOn.png ../_images/BulbOff.png ../_images/BulbOn.png

Evente të tjera të mouse

Siç u përmend në fillim të këtij mësimi, një program mund t’i përgjigjet gjithashtu lëshimit të butonit të miut dhe ngjarjeve të lëvizjes së mouse. Për ta bërë këtë, është e nevojshme të krahasoni vlerën e event.type me konstantet pg.MOUSEBUTTONUP dhe pg.MOUSEMOTION. Më poshtë janë detyrat ku mund ta provoni.

Detyra - linjat e vizatimit:

     Përfundoni programin në mënyrë që të mund të vizatojë vija të drejta, si në shembull.

Detyrë - vizatime vijash me fshirje:

     Kopjoni programin për vizatimin e linjave më poshtë, pastaj shtoni një mundësi për të fshirë të gjitha rreshtat me një klik të djathtë.

Këshillë: Për të bërë dallimin midis butonave të mouse të majtë dhe të djathtë në program, të dhënat event.button duhet të përdoren përsëri. Kodi në funksionin hand_event tani duhet të duket si kjo:

Detyrë - tërheqje:

     Programi i mëposhtëm tregon se si të lejojë përdoruesit e programit të tërheqë objektet.

     Provoni programin (tërhiqni mollët në shportë) dhe përpiquni ta kuptoni atë, pastaj përgjigjuni pyetjeve më poshtë.

../_images/apple.png ../_images/basket.png ../_images/drag_scene.png

    Q-77: Çfarë ështl variabli i_apple në program?

  • indeksi i mollëve që po vizatojmë
  • Provo përsëri
  • indeksi i mollëve që po tërheqim
  • Saktë
  • numri total i mollëve
  • Provo përsëri
  • numri i mollëve të mbetura në pemë
  • Provo përsëri
    Q-78: Lidh fjalët me kuptimin. Provo përsëri!
  • if mouse_is_on_image(event.pos, basket_pos, basket_image):
  • nëse molla duhet fshirë
  • if mouse_is_on_image(event.pos, apple_positions[i]
  • nëse perdoruesi mori mollën
  • if len(apple_positions) == 0:
  • nëse loja ka mbaruar
  • if i_apple >= 0:
  • nëse tërheqja vazhdon

    Q-79: Si e bëjmë dallimin midis tërheqjes dhe lëvizjes së thjeshtë të mouse në një program?

  • ne lexojmë nëse butoni i mouse është joaktiv gjatë lëvizjes
  • kjo nuk është një mënyrë e përshtatshme, pasi butoni mund të shtypet në një hapësirë të zbrazët (përdoruesi nuk e "mori" objektin që duhet të tërhiqet)
  • tërheqja është tip tjetër eventi
  • Jo, nuk ka kështu tip eventi
  • kur lëvizim mouse, indeksi i "mollës që po tërheqim" është -1
  • Saktë