İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Python Turtle ile Şekil Nasıl Boyanır? begin_fill ve end_fill Kullanımı

python-turtle-ile-sekil-boyama-begin-fill-end-fill
Bu yazıda neler var?
  1. Kırmızı dolgulu, mavi kenarlı kare: çalışan örnek
  2. begin_fill ve end_fill hangi sırayla çağrılır, şekil kapanmazsa ne olur?
  3. color(), pencolor() ve fillcolor() arasındaki fark nedir?
  4. Boyama çalışmıyorsa görsel belirtiye göre hata teşhisi
  5. Mini proje: iki renkli kareyi fonksiyonla boyamak
  6. Sık Sorulan Sorular

Python Turtle ile şekil boyamak için çizime başlamadan önce begin_fill(), şekil tamamlandığında end_fill() çağrılır. Dolgu rengini fillcolor() ya da kenar ve dolgu rengini birlikte ayarlayan color() belirler. İki komut arasında kaplumbağanın gittiği noktalar kaydedilir ve end_fill() bu noktalarla çevrili alanı boyar.

Kırmızı dolgulu, mavi kenarlı kare: çalışan örnek

Aşağıdaki program mavi kenarlı, içi kırmızı bir kare çizer:

import turtle

turtle.color('blue', 'red')   # kenar mavi, dolgu kırmızı
turtle.begin_fill()
for _ in range(4):
    turtle.forward(100)
    turtle.left(90)
turtle.end_fill()

turtle.done()

Beklenen sonuç: Pencerede mavi çizgiyle çevrili, içi kırmızı bir kare görürsün. Kaplumbağa pencerenin ortasından sağa doğru ilerleyerek çizer. Kare sol alt köşeden başlar, sağa, sonra yukarı doğru tamamlanır; yani şekil başlangıç noktasının sağ üstünde kalır.

Kare dört eşit kenardan ve dört dik dönüşten oluşur. Bu yüzden forward(100) ve left(90) çiftini dört kez yazmak yerine for döngüsüyle tekrar ettirdik. Döngü yazımı sana yeniyse ücretsiz Sıfırdan Temel Python video eğitimi tekrarlı komutları adım adım gösterir.

Programın son satırındaki done() pencereyi açık tutar. done() ile mainloop() aynı işi yapar: ikisi de pencerenin olaylarını dinleyen olay döngüsünü başlatır, bu yüzden birini yazman yeterlidir. Olay döngüsü başladıktan sonra yazdığın komutlar beklediğin gibi çalışmaz; pencere kapanana kadar program bu satırda bekler. Bu nedenle done() her zaman programın son satırı olmalıdır.

begin_fill ve end_fill hangi sırayla çağrılır, şekil kapanmazsa ne olur?

begin_fill ve end_fill hangi sırayla çağrılır, şekil kapanmazsa ne olur?

begin_fill() çağrıldığında Turtle kaplumbağanın o andan sonra geçtiği noktaları kaydetmeye başlar. end_fill() bu noktaları sırayla birleştirir ve çevrelenen alanı doldurur. Sıra bozulursa kaydedilecek nokta kalmaz.

begin_fill çizimden önce, end_fill çizim tamamlandıktan sonra kullanılmalıdır.

Yanlış sıra ve doğru sıra

Yanlış sırada end_fill() çizimden önce çağrılır:

import turtle

turtle.fillcolor('red')
turtle.begin_fill()
turtle.end_fill()          # kayıt boşken dolgu bitirildi
for _ in range(4):
    turtle.forward(100)
    turtle.left(90)

turtle.done()

Sonuç: Kare çizilir ama içi boş kalır, çünkü end_fill() çalıştığında doldurulacak bir yol yoktu.

Doğru sırada çizim iki komutun arasındadır:

import turtle

turtle.fillcolor('red')
turtle.begin_fill()
for _ in range(4):
    turtle.forward(100)
    turtle.left(90)
turtle.end_fill()          # çizim bittikten sonra

turtle.done()

Sonuç: Karenin içi kırmızıyla dolar.

Şekil kapanmazsa

Kapalı şekil, kaplumbağanın başlangıç noktasına geri dönen yoldur. Yol tam kapanmazsa Turtle doldururken son noktayı başlangıç noktasına bağlıymış gibi kabul eder. Örneğin döngüyü dört yerine üç kez çalıştırırsan kare yine tamamen kırmızıya boyanır, fakat son kenar çizilmediği için çevresinde çizgi eksik kalır. Dolgu ile çizgi birbirini tutmuyorsa çizimi başlangıç noktasında bitirmeyi dene; böylece hem dolgu hem kenar çizgisi eksiksiz görünür.

color(), pencolor() ve fillcolor() arasındaki fark nedir?

color(), pencolor() ve fillcolor() arasındaki fark nedir?

Turtle'da iki ayrı renk vardır: kenar (kalem) rengi çizgiyi, dolgu rengi şeklin içini belirler. Üç fonksiyon bu iki rengi farklı biçimlerde ayarlar:

import turtle

t = turtle.Turtle()

t.color("green")          # kenar ve dolgu aynı anda yeşil
t.color("blue", "red")    # ilk değer kenar, ikinci değer dolgu
t.pencolor("blue")        # yalnız kenar rengi
t.fillcolor("red")        # yalnız dolgu rengi

Tek argümanlı color("green") iki rengi birden aynı değere çeker. İki argümanlı color("blue", "red") ise sırayla kenarı mavi, içi kırmızı yapar. pencolor() yalnız çizgiye, fillcolor() yalnız içe dokunur. Argümansız color() çağrısı ise geçerli renk çiftini geri verir.

Renkleri "red" ve "blue" gibi adlarla ya da "#RRGGBB" biçimindeki onaltılık kodlarla yazabilirsin; örneğin "#ff0000" kırmızıdır.

Aynı kare, üç ayrı renk ayarı

def kare(t):
    t.begin_fill()
    for _ in range(4):
        t.forward(100)
        t.left(90)
    t.end_fill()

# A: yalnız fillcolor
t.fillcolor("red")
kare(t)

# B: yalnız pencolor
t.pencolor("blue")
kare(t)

# C: ikisi birlikte
t.color("blue", "red")
kare(t)

Her çağrıyı kendi başına düşün, çünkü ayar bir kez yapılınca sonraki çizimlere de taşınır. Ayarlar sıfırdan başlasaydı sonuçlar şöyle olurdu:

  • A: İç kırmızı olur, kenar varsayılan renk olan siyah kalır.
  • B: Kenar mavi olur, iç varsayılan dolgu rengi olan siyahla dolar.
  • C: Mavi kenarlı, kırmızı dolgulu kare çıkar.

Dolgunun beklenmedik biçimde siyah çıkması çoğu zaman yalnızca pencolor() kullanıp fillcolor() ayarını unutmaktan kaynaklanır.

Boyama çalışmıyorsa görsel belirtiye göre hata teşhisi

Kodu baştan okumak yerine ekrandaki görüntüden geriye doğru gitmek daha hızlıdır. Aşağıdaki tablo belirtiyi olası nedene ve düzeltmeye bağlar:

Ekrandaki belirtiOlası nedenDüzeltme
Çizgi çiziliyor ama içi boşbegin_fill() ya da end_fill() eksik; ya da dolgu rengi arka planla aynıİki çağrıyı da çizimin başına ve sonuna ekle; fillcolor() değerini arka plandan farklı seç
Dolgu hiç görünmüyorend_fill() çağrılmamış; dolgu, end_fill() çağrıldığı anda uygulanırÇizim bittikten sonra end_fill() yaz
Şekil açık kaldı, kenarlar birleşmiyorDönüş açılarının toplamı 360 derece etmiyor ya da kenar sayısı eksik; çizim başlangıç noktasına dönmüyorKenar sayısını ve açıyı kontrol et; kare için dört kenar ve her seferinde 90 derece
Çağrı sırası karışıkbegin_fill() çizimden sonra çağrılmış ya da end_fill() çizimden önce yazılmışSırayı begin_fill(), çizim, end_fill() yap
Şekil beklenmedik biçimde doluyorpenup() durumundaki hareketler çizgi bırakmaz ama dolgu noktalarına dahil olabilirKonumlanmayı (penup(), goto(), pendown()) begin_fill() çağrısından önce bitir

Üçüncü satırdaki sorun genellikle döngü ve açı mantığından doğar. Orada takılıyorsan ücretsiz Python bilgi testiyle seviyeni ölçüp hangi konuyu pekiştirmen gerektiğini görebilirsin.

Mini proje: iki renkli kareyi fonksiyonla boyamak

Aynı boyama adımlarını her kare için baştan yazmak yerine bir fonksiyona koyabilirsin. Fonksiyon konumu, boyutu, kenar rengini ve dolgu rengini parametre olarak alır.

import turtle

def kare_boya(x, y, boyut, kenar, dolgu):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    turtle.color(kenar, dolgu)
    turtle.begin_fill()
    for _ in range(4):
        turtle.forward(boyut)
        turtle.left(90)
    turtle.end_fill()

turtle.pensize(3)
kare_boya(-150, 0, 100, "blue", "red")
kare_boya(50, 0, 100, "green", "yellow")
turtle.done()

Beklenen sonuç: Pencerede yan yana iki ayrı kare görürsün. Soldaki kare kırmızı dolgulu ve mavi kenarlıdır, sağdaki sarı dolgulu ve yeşil kenarlıdır. İkisinin arasında bağlayıcı bir çizgi yoktur. Konuma gitme işi penup() ile yapıldı ve begin_fill() çağrılmadan önce bitti. Böylece dolguya yalnızca karenin köşeleri girdi.

Kendin dene

  • boyut değerini 60 ya da 150 yapıp karelerin birbirine değip değmediğini gözle.
  • Üçgen için range(4) yerine range(3), dönüş açısı için 90 yerine 120 yaz. Fonksiyonun adını da ucgen_boya yapabilirsin.
  • Üçüncü bir çağrı ekleyip konumu ve renkleri değiştir.

Böyle küçük programları kendi başına kurarken takılıyorsan, birebir Python dersleri genel Python öğrenme yolunun bir parçası olarak fonksiyon, döngü ve parametre mantığını kişiye özel bir müfredatla birlikte çalışmana imkân verir.

Sık Sorulan Sorular

Turtle'da done() ile mainloop() arasında fark var mı?

Pratikte yok. İkisi de olay döngüsünü başlatır ve pencereyi sen kapatana kadar açık tutar. done(), mainloop() için kısayol olarak kullanılır. Programın en sonuna bir kez yazman yeterlidir.

Dolgu rengi neden siyah çıkıyor?

Dolgu rengi hiç belirlenmediyse Turtle varsayılan rengi kullanır ve şekil siyah dolar. color("blue", "red") ya da fillcolor("red") çağrısını begin_fill() satırından önce yaz. Renk adını yanlış yazarsan Turtle bunu hata mesajıyla bildirir.

Daire ya da yıldız gibi şekiller de begin_fill ile boyanır mı?

Evet, mantık aynıdır. Daire için begin_fill() ile end_fill() arasına circle(50) yazarsın. Yıldız gibi kendini kesen şekillerde dolgunun ortada nasıl göründüğünü kendin deneyerek gör.

Boyamada hatanın büyük kısmı sıradan çıkar. Önce rengi seç, sonra begin_fill() ile başla, şekli çiz ve end_fill() ile bitir. Sonuç beklediğin gibi değilse görsel belirtiye bakıp hangi adımın yer değiştirdiğini bulabilirsin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara