Arvutiteaduse instituut
  1. Esileht
  2. Python koolis
EN
Logi sisse

Python koolis

  • Sissejuhatus
  • Teemad
  • PyGame

1. Aken
2. Värvid ja koordinaadid
3. Joonistamine
4. Pildid
5. Tekst
6. Animeerimine
7. Juhtimine klaviatuuriga
8. Juhtimine hiirega
9. Heli
10. Õpetusi

  • ÜLESANDED

1. PyGame: aken

Pygame on üks võimalikest moodulitest, mis aitab Pythonis lihtsamalt luua graafilisi programme. Pygame'i leidmisest ja installeerimisest oli juttu kursuse esimeses peatükis, küllap leidsite sealt ka näidiskoodi, mille õnnestunud käivitamine näitab, et kõik vajalik on installeeritud.

Sarnaselt teistele moodulitele tuleb ka see kasutamiseks eelnevalt programmi importida ning see ka käivitada, hilisemaks kasutamiseks impordime ka sys-mooduli:

import pygame, sys
pygame.init()

Kui programmi töökaustas on fail nimega pygame.py, siis imporditakse "õige" PyGame'i asemel hoopis see. Kuna aga selles vajalikke funktsioone pole, antakse veateade (näiteks "'module' object has no attribute 'init'"). Seega: ärge andke oma failidele moodulite nimesid!

Töö graafilises kasutajaliideses toimub akna abil, seega tuleb luua aken (praegusel juhul on akna suurus 800 korda 600 punkti):

ekraan = pygame.display.set_mode([800, 600])

Saame muuta ka akna omadusi, näiteks pealkirja:

pygame.display.set_caption("Pealkiri")

Aknasse hakkame lisama erinevaid kujundeid, neid muutma jne. Selleks, värskendataks ka reaalset ekraanipilti, tuleb kasutada pärast joonistamiskäske sisaldavaid ridu käsku "flip":

pygame.display.flip()

Kuna hakkame looma programme, mis ootavad kasutajalt hiire või klaviatuuri abil antavaid käsklusi, siis peaksime programmi lisama tsükli, mis "kuulab" (inglise k. listen) korraldusi ning reageerib neile vastavalt. Järgnev tsükkel on lõppematu (kuna while True on alati tõene), kuid sellele on lisatud for-tsükkel, mis kontrollib pidevalt (iga tsükli sammu ajal) sündmusi. Iga leitud sündmuse puhul tehakse kontroll, kas antud sündmus on üks meile olulistest ning käitutakse vastavalt sellele. Antud näites kontrollitakse vaid üht tegevust (akna sulgemist vastava nupu abil) ning antakse käsk programmi töö lõpetada.

while True:
   for i in pygame.event.get():
       if i.type == pygame.QUIT:
           sys.exit()

Kui käivitame programmi IDLEs, siis võime märgata, et programmi sulgemine sel viisil ei tööta korralikult, probleeme tekitab IDLE ja Pygame'i erinevad sulgemismeetodid. Py-laiendiga faili lihtsalt topeltklõpsuga käivitades peaks kõik korras olema.

Teine võimalus, kuidas programmiakent sulgeda, mis toimib mõlemal juhul. Defineerime muutuja running, mille väärtus on True, kogu programmi töö jooksul. Sarnaselt eelmisele näitele, kontrollime for-tsükliga, kas kasutaja on akna sulgemise nupule vajutanud ning kui on, siis muudetakse muutuja running väärtus False'iks (vääraks), mis lõpetab tsükli töö. Viimasel real pärast tsüklit sulgeme pygame'i, mis ühtlasi sulgeb programmi akna.

running = True # Muutuja "running" väärtustamine
while running: #Tsükli käivitamine kui muutuja on tõene
    for i in pygame.event.get(): # Kuulame programmi tööd
        if i.type == pygame.QUIT: # Kui vajutame akna sulgemise nuppu
            running = False # Muudame muutuja väärtuse vääraks

pygame.quit() # Sulgeme programmi akna

Sarnaselt eelmisele näites olnud if-lausele võime lisada teisi analoogilisi tingimuslauseid, mis kontrollivad teiste sündmuste esinemist (hiireklõpse, klahvivajutusi jne).

Kokkuvõtvalt on kood enne järgmisi samme selline:

import pygame, sys # Impordime vajalikud moodulid
pygame.init() # Käivitame Pygame'i
ekraan = pygame.display.set_mode([800, 600]) # Loome vajaliku suurusega akna
pygame.display.set_caption("Pealkiri") # Paneme aknale pealkirja
pygame.display.flip() # Näitame akent 
running = True # Muutuja "running" väärtustamine
while running: #Tsükli käivitamine kui muutuja on tõene
    for i in pygame.event.get(): # Kuulame programmi tööd
        if i.type == pygame.QUIT: # Kui vajutame akna sulgemise nuppu
            running = False # Muudame muutuja väärtuse vääraks
pygame.quit() # Sulgeme programmi akna

Lisamaterjalid

  • http://www.pygame.org/docs/ref/display.html

Creative Commons litsentsiga Autorile viitamine + Mitteäriline eesmärk 3.0 Eesti (CC BY-NC 3.0 EE) - https://creativecommons.org/licenses/by-nc/3.0/ee/

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused