Bu bölüm, bilgisayar ekranlarından aşina olduğunuz pencereler (formlar) ile tanışacağınız ve kullanmaya başlayacağınız kısımdır. Grafik arayüz (pencere) kavramı, temelde yazılımın komut satırından çıkıp görsel ara birimler aracılığıyla ifade edilmesidir. Kaplumbağa grafikler grafik arayüz üzerinde çizim araçları kullanarak çalışılmasına olanak tanırlar. Kaplumbağa grafikler Python gibi metin tabanlı dillerde kod yazmaya yeni başlayanlar için en eğlenceli modüllerden biridir. Kaplumbağa grafikler ile daha önceki bölümlerde öğrendiğiniz kavramları kullanarak bol miktarda pratik yapabilirsiniz. Kaplumbağa grafiklerin tarihine bakıldığında matematik eğitimi için logo programla dilinde kullanıldığı görülmektedir. John Dewey’in öğrencisi olan Seymour Papert, öğrencilerine matematik öğretmek için kaplumbağa robotunu geliştirmiştir
Turtle (kaplumbağa) standart python modüllerinden biridir. Bu nedenle turtle modülünü çalışmamızda kullanabilmek için modülü içeri aktarmamız (dâhil etmemiz) gerekmektedir. Bunun için ilk satıra import turtle yazmanız yeterli olacaktır. Python turtle modülünü çağırırken turtle.py adında bir dosya çağırdığından yapılacak örneklere turtle.py isminin verilmemesi yararlı olacaktır. turtle modülü projeye dâhil edildikten sonra bir turtle nesnesi oluşturup buna isim verilir. Bunu çizim yapmak için bir kalem almak gibi düşünebilirsiniz. Bu bölümdeki uygulamalar idle kullanılarak yapılmıştır.
kalem=turtle.Turtle() yazarak kalem isminde bir Turtle (kaplumbağa) nesnesi oluşturmuş oluruz. Kalem artık Turtle nesnesinin sahip olduğu tüm özelliklere sahip olacaktır. Böylece Turtle nesnesinin sahip olduğu fonksiyonlar kullanılarak çizim işlemleri yapılabilir. Nesnenin fonksiyonlarını yazarken nesne adından sonra nokta koyup fonksiyon adı yazılır. Örneğin, kalem. forward() kalem nesnesinin ileri gitme fonksiyonudur. forward fonksiyonu gidilecek mesafeyi girdi olarak alır. Örneğin kalem.forward (50) yazılarak elli birim ilerlenir. Çizim işlemi bitince turtle.done() fonksiyonu ile program tamamlanır. Böylece turtle modülü kullanarak kod yazmaya hazır hale gelinir. Örnek 1’deki dört satırlık kodu yazıp çalıştırdığınızda sonuç Şekil 8.2’de görüldüğü gibi olur.
Örnek 1
100 birimlik ileri yönde çizgi çizme
import turtle
=turtle.Turtle()
kalem100)
kalem.forward( turtle.done()
Şekil 8.2: Örnek 1 kod çıktısı
Turtle modülünde dört temel hareket bulunmaktadır. Bunlar, ileri: forward (mesafe), geri: backward (mesafe), sağ: right (açı), sol: left (açı) komutlarıdır. Bu komutlar kullanılarak yapılan örnekleri inceleyelim.
Örnek 2
right ve forward fonksiyonlarının birlikte kullanımı
import turtle
=turtle.Turtle()
kalem100)
kalem.forward(90)
kalem.right(100)
kalem.forward( turtle.done()
Şekil 8.3: Örnek 2 kod çıktısı
Örnek 3
right ve backward fonksiyonlarının birlikte kullanımı
import turtle
=turtle.Turtle()
kalem100)
kalem.backward(90)
kalem.right(100)
kalem.backward( turtle.done()
Şekil 8.4: Örnek 3 kod çıktısı
Örnek 4
right ve forward fonksiyonlarının birlikte kullanımı
import turtle
=turtle.Turtle()
kalem-100.5)
kalem.forward(90)
kalem.right(-100.5)
kalem.forward( turtle.done()
Şekil 8.5: Örnek 4 kod çıktısı
Örnek 5
right ve backward fonksiyonlarının birlikte kullanımı
import turtle
=turtle.Turtle()
kalem-100.6)
kalem.backward(90)
kalem.right(-100.6)
kalem.backward( turtle.done()
Şekil 8.6: Örnek 5 kod çıktısı
Şekil 8.3 ve Şekil 8.6 benzer çıktılar oluştuğunu fark ettiniz mi? Aynı durum Şekil 8.4 ve Şekil 8.5 için de geçerlidir. Bilgisayar: ileri 100 adım git ile geri eksi 100 adım git komutlarını aldığında aynı sonucu üretir. Kod çıktıları arasındaki fark mesafe girdileridir
Örnek 6
left ve forward fonksiyonlarının birlikte kullanımı
import turtle
=turtle.Turtle()
kalem45)
kalem.left(50)
kalem.forward( turtle.done()
Şekil 8.7: Örnek 6 kod çıktısı
Örnek 7
Açı kullanarak şekil çizme örneği
import turtle
=turtle.Turtle()
kalem50)
kalem.forward(120)
kalem.right(50)
kalem.forward(120)
kalem.right( turtle.done()
Şekil 8.8: Örnek 7 kod çıktısı
Temel hareketler için bu örnekleri uyguladıktan sonra hareket fonksiyonlarının açı ve uzunlukları kullanıcıdan alacağınız örnekleri inceleyebilirsiniz
HATIRLATMA
Kullanıcıdan input( ) fonksiyonu ile alınan metin değerini int veya float değerine dönüştürülmesi
gerekir aksi durumda hata mesajı karşılaşılır.
Örnek 8
Çizgi mesafesini kullanıcıdan alıp şekil çizen program
import turtle
=turtle.Turtle()
kalem=float(input("çizgi mesafesini
mesafegiriniz"))
kalem.forward(mesafe)90)
kalem.right(
kalem.forward(mesafe) turtle.done()
Şekil 8.9: Örnek 8 kod çıktısı
Örnek 9
Çizgi mesafesini ve dönüş açısını kullanıcıdan alıp şekil çizen program
import turtle
=turtle.Turtle()
kalem=int(input("çizgi mesafesini
mesafegiriniz"))
=int(input("dönüş açısını
donus_açısıgiriniz"))
kalem.forward(mesafe)
kalem.right(donus_açısı)
kalem.forward(mesafe) turtle.done()
Şekil 8.10: Örnek 9 kod çıktısı
Turtle nesnesinde çizim için kalem rengi: pencolor(” “)** veya color(” ”) girdi olarak iki tırnak içinde renk adı “red” veya tırnak içinde diyez ile birlikte html renk kodu “#ACE515” gibi alır. Renk kodlarını https://htmlcolorcodes.com/ adresinden öğrenebilirsiniz. Kalem kalınlığı pensize (sayı değeri)** fonksiyonu ile ayarlanır
Örnek 10
pencolor, pensize ve color uygulaması
import turtle
=turtle.Turtle()
kalem"red")
kalem.pencolor(3)
kalem.pensize(100)
kalem.forward(90)
kalem.left("#ACE515")
kalem.color(8)
kalem.pensize(100)
kalem.forward(90)
kalem.left("yellow")
kalem.pencolor(6)
kalem.pensize(100)
kalem.forward(90)
kalem.left("#2259C1")
kalem.color(1)
kalem.pensize(100)
kalem.forward(90)
kalem.left ( turtle.done()
Şekil 8.11: Örnek 10 kod çıktısı
Kaplumbağa grafiklerde pencerenin istenen noktasına gidebilme goto (x ekseni, y ekseni) Kaplumbağa grafiklerde nokta çizme dot( ) Kaplumbağa grafiklerde çizmeden ilerleme penup( ) veya up( ) ardından forward( ) Kaplumbağa grafiklerde çizime tekrar dönmek için ilerleme pendown( ) veya down( ) ardından forward( ) fonksiyonları kullanılır. Turtle çizim aracının görünüm şekli için de shape( ) fonksiyonu bulunmaktadır. Bu fonksiyon ‘arrow’, ‘classic’, ‘turtle’, ‘circle’ olmak üzere 4 şekle sahip olabilir.
Örnek 11
dot ile çizim uygulaması
import turtle
=turtle.Turtle()
kalemfor i in range(5):
kalem.dot()20)
kalem.forward( turtle.done()
Şekil 8.12: Örnek 11 kod çıktısı
örnek 12
dot ile çizgisiz şekil uygulaması
import turtle
=turtle.Turtle()
kalem
kalem.up()for i in range(5):
kalem.dot()20)
kalem.forward( turtle.done()
Şekil 8.13: Örnek 12 kod çıktısı
Örnek 13
shape ve goto fonksiyonlarının kullanımı
import turtle
=turtle.Turtle()
kalem"turtle")
kalem.shape(100)
kalem.forward(
kalem.penup()0,100)
kalem.goto(for i in range(5):
kalem.dot()20)
kalem.forward( turtle.done()
Şekil 8.14: Örnek 13 kod çıktısı
Örnek 14
shape ve goto fonksiyonlarının farklı bir çizim için kullanımı
import turtle
=turtle.Turtle()
kalem"turtle")
kalem.shape(for i in range(4):
kalem.up()20)
kalem.forward(
kalem.dot()
kalem.down()20)
kalem.forward(
kalem.dot() turtle.done()
Şekil 8.15: Örnek 14 kod çıktısı
Turtle nesnesi ile geometrik şekiller çizmek oldukça kolaydır. Çokgenler başta olmak üzere birçok geometrik şekli ileri ve sağ/sol dönüş fonksiyonları ile yapmak mümkündür. Örnek 15’te bir kare çizdirildiğini fark etmişsinizdir. Fark etmenizi istediğimiz bir diğer nokta, forward ve left fonksiyonlarının 4 defa kullanılmasıdır (Örnek 15). Kodu defalarca yazmak yerine döngüler konusunda işlendiği gibi for yapısı ile kolayca çizdirebiliriz. Aynı mantığı Örnek 16’da gösterildiği gibi altıgen çizdirmek için kullanabiliriz.
Örnek 15
turtle ile kare çizme uygulaması
import turtle
=turtle.Turtle()
kalem"red")
kalem.pencolor(3)
kalem.pensize(for i in range(4):
100)
kalem.forward(90)
kalem.left( turtle.done()
Şekil 8.16: Örnek 15 kod çıktısı
Örnek 16
turtle ile altıgen çizme uygulaması
import turtle
=turtle.Turtle()
kalem"blue")
kalem.pencolor(3)
kalem.pensize(for i in range(6):
100)
kalem.forward(60)
kalem.left( turtle.done()
Şekil 8.17: Örnek 16 kod çıktısı
Çokgen çizdirmeyi kenar sayısını kullanıcıdan isteyerek de yapabilirsiniz. Burada dikkat edilecek nokta çokgen kaç kenarlı olursa olsun çokgen çizimi tamamlandığında 360 derecelik dönüş yapacak olmasıdır. Bu nedenle çokgenin dönüş açısı 360/ kenar sayısı olur
Örnek 17
Kullanıcının istediği kenar sayısında çokgen çizdirmek
import turtle
=turtle.Turtle()
kalem"red")
kalem.pencolor(3)
kalem.pensize(=int(input(" çizmek istediğiniz çokgenin kenar sayısını giriniz"))
kenar_sayısıfor i in range(kenar_sayısı):
50)
kalem.forward(360/kenar_sayısı)
kalem.left( turtle.done()
Şekil 8.18: Örnek 17 kod çıktısı
Çember çizmek için circle (yarıçap değeri) fonksiyonu yeterlidir. Örnek 18’de farklı renkte ve yarıçapta 3 adet çember çizdirilmektedir.
Örnek 18
circle fonksiyonu ile 3 farklı yarıçapta ve renkte çember çizdirme
import turtle
=turtle.Turtle()
kalem"orange")
kalem.pencolor(2)
kalem.pensize(20)
kalem.circle("red")
kalem.pencolor(30)
kalem.circle("blue")
kalem.pencolor(40)
kalem.circle( turtle.done()
Şekil 8.19: Örnek 18 kod çıktısı
Çember ve çokgenler kullanılarak çok farklı desenler oluşturabileceğini fark ettiniz mi? Çokgenlerle farklı desenler oluşturmaya dair Örnek 19’u inceleyebilirsiniz. Bunu yapmak için iç içe döngüler kullanılmaktadır. Yani çokgenlerden bol miktarda çizdirilmesi gerekmektedir. Bu kodlar robota yaptırıldığında istenilen desenler farklı yüzeylere çizdirilebilirdi.
Örnek 19
İç içe döngüler ile desen çizdirme
import turtle
=turtle.Turtle()
kalem"green")
kalem.color(for i in range (6):
for j in range (6):
50)
kalem.forward(60) # iç döngü
kalem.left(60)# dış döngü
kalem.left( turtle.done()
Şekil 8.20: Örnek 19 kod çıktıs
Örnek 19’daki deseni istendiğinde ve parametreler girildiğinde çizen bir fonksiyon tanımlayıp kullanınız.
Örnekte fonksiyon için verilen değerlerin doğruluğunun kontrol edildiğine dikkat ediniz. Kenar uzunluğunun eksi olarak da girilebileceği düşünüldüğünden ve if koşul yapısının karmaşık hâle getirilmemesi için dâhil edilmemiştir.
Örnek 20
Desen çizen fonksiyon uygulaması
import turtle
def desen_çiz (kenar_uzunluğu=50,iç_kenar=3,tur_sayısı=3):
if(tur_sayısı <01 or iç_kenar<3):
print("hatalı veri girdiniz")
else:
=turtle.Turtle()
kalemfor i in range (tur_sayısı):
for j in range (iç_kenar):
kalem.forward(kenar_uzunluğu)360/iç_kenar)
kalem.left(360/tur_sayısı)
kalem.left(
desen_çiz()60,4,5)
desen_çiz(70,6,10)
desen_çiz( turtle.done()
Şekil 8.21: Örnek 20 kod çıktısı