Python - Teknőcgrafika

1. példa: Egy víszintes vonal rajzolása.

A minimumhoz használhatjuk azt az importálási módot, ahol közvetlenül meghívhatóak a függvények.

         
1from turtle import *
2
3forward(100)
4
5 # megakadályozza az azonnali ablakbezárást
6 # IDLE (Python ...)-ban nem kell
7 # turtle.done()
2. példa: Rajzol egy négyzetet.
         
1from turtle import *
2
3forward(100) # előre 100 px
4left(90) # balra 90 fok
5forward(100) # előre 100 px
6left(90) # balra 90 fok
7forward(100) # előre 100 px
8left(90) # balra 90 fok
9forward(100) # előre 100 px
10left(90) # balra 90 fok
3. példa: Rajzol egy kis házikót.

Az ablak és a vonalat húzó teknőc beállításaihoz adjunk nevet az ablaknak és adjunk nevet a teknőcnek! Ebben az esetben akár több teknőcöt is létrehozhatunk.

Figyelem: átváltottunk az alap importálási módba. Az első két példában szereplő változat előnye, hogy rövidebben adjuk meg az utasításokat, hátránya, hogy bonyolultabb programoknál nagyobb eséllyel lehet függvénynév probléma.

         
1import turtle
2
3ablak = turtle.Screen() # kisablak létrehozása
4ablak.title("Teknőcgrafika") # kisablak címe
5ablak.bgcolor("yellow") # kisablak háttérszíne
6ablak.setup(800,600) # kisablak mérete
7 # ablak.bgpic("kep.gif") háttérkép
8
9fredi = turtle.Turtle() # kurzor létrehozása
10fredi.shape("turtle") # kurzor formája
11
12fredi.forward(100) # előre 100 px
13fredi.left(90) # balra 90 fok
14fredi.forward(100) # előre 100 px
15fredi.left(90) # balra 90 fok
16fredi.forward(100) # előre 100 px
17fredi.left(90) # balra 90 fok
18fredi.forward(100) # előre 100 px
19fredi.left(90) # balra 90 fok
20
21 # háztető
22fredi.teleport(0, 100) # rajzolás nélkül ugrik
23fredi.pencolor("red") # vonal színe
24fredi.pensize("2") # vonal vastagsága
25
26fredi.left(60) # balra 60 fok
27fredi.forward(100) # előre 100 px
28fredi.right(120) # jobbra 120 fok
29fredi.forward(100) # előre 100 px
30fredi.left(60) # vízszintes irányba visszaáll
31
32 # ajtó
33fredi.teleport(10, 0) # rajzolás nélkül ugrik
34fredi.pencolor("blue") # vonal színe
35fredi.pensize("3") # vonal vastagsága
36
37fredi.fillcolor("pink") # kitöltés színe
38fredi.begin_fill() # kitöltés kezdete
39
40fredi.up() # tollat fel
41fredi.forward(20) # előre 100 px
42fredi.left(90) # balra 90 fok
43fredi.down() # tollat le
44
45fredi.forward(60) # előre 100 px
46fredi.left(90) # balra 90 fok
47fredi.forward(20) # előre 100 px
48fredi.left(90) # balra 90 fok
49fredi.forward(60) # előre 100 px
50fredi.left(90) # balra 90 fok
51fredi.end_fill() # kitöltés vége
4. példa: Eseménykezelés, kattintás
         
1import turtle
2
3ablak = turtle.Screen() # setup
4teknoc = turtle.Turtle() # setup
5teknoc.shape("turtle") # setup
6
7def kattintas(x, y): # eljárás létrehozása
8    teknoc.teleport(x, y) # eljárás belseje
9    teknoc.dot(20, "red") # eljárás belseje
10
11ablak.onclick(kattintas) # esemény
5A. példa: Eseménykezelés, gombnyomás
         
1import turtle
2
3ablak = turtle.Screen() # ablak létrehozása
4fredi = turtle.Turtle() # kurzor létrehozása
5fredi.shape("turtle") # kurzor formája
6
7def elore(): # saját parancs
8    fredi.forward(20)
9
10def jobbra(): # saját parancs
11    fredi.right(15)
12
13def balra(): # saját parancs
14    fredi.left(15)
15
16
17ablak.onkey(elore, 'Up') # gomb lenyomása
18ablak.onkey(jobbra, 'Right') # gomb lenyomása
19ablak.onkey(balra, 'Left') # gomb lenyomása
20ablak.listen() # gombnyomásra vár
21
22turtle.done()
5B. példa: Eseménykezelés, gombnyomás, nyomvatartás
         
1import turtle
2
3ablak = turtle.Screen()
4fredi = turtle.Turtle()
5fredi.shape("turtle")
6
7elore_megy = False
8
9def halad(aktiv):
10    global elore_megy
11    elore_megy = aktiv
12
13def frissit():
14    if elore_megy:
15        fredi.forward(5)
16    ablak.ontimer(frissit, 20) # frissít 20msec-enként
17
18ablak.onkeypress(lambda: halad(True), "Up") # lenyomás
19ablak.onkeyrelease(lambda: halad(False), "Up") # elengedés
20
21frissit()
22ablak.listen()
23turtle.done()
5C. példa: Eseménykezelés, gombnyomás, nyomvatartás
         
1import turtle
2
3ablak = turtle.Screen()
4fredi = turtle.Turtle()
5fredi.shape("turtle")
6fredi.speed(0)
7
8allapot = {
9    "elore": False,
10    "bal": False,
11    "jobb": False
12}
13
14def irany(gomb, aktiv):
15    allapot[gomb] = aktiv
16
17def frissit():
18    if allapot["bal"]:
19        fredi.left(4)
20    if allapot["jobb"]:
21        fredi.right(4)
22    if allapot["elore"]:
23        fredi.forward(4)
24
25    ablak.ontimer(frissit, 10) # 20 ms = 50 Hz
26
27 # billentyűk
28ablak.onkeypress(lambda: irany("elore", True), "Up")
29ablak.onkeyrelease(lambda: irany("elore", False), "Up")
30
31ablak.onkeypress(lambda: irany("bal", True), "Left")
32ablak.onkeyrelease(lambda: irany("bal", False), "Left")
33
34ablak.onkeypress(lambda: irany("jobb", True), "Right")
35ablak.onkeyrelease(lambda: irany("jobb", False), "Right")
36
37frissit()
38ablak.listen()
39turtle.done()