Tkinter Y Koordinatı

Rica etsem kareyi uygulamanın üzerinde biraz oynadığım şu sürümünde yapabilir misiniz? :

from tkinter import *
from tkinter import messagebox as msg
import tkinter.ttk as ttk


class AlanKatiliDogrular(Frame):

    class Nokta:
        noktalar = list()

        def __init__(self, x=None, y=None, analitik_x=None, analitik_y=None):
            self.cozunurluk_x = Frame(None).winfo_screenwidth()
            self.cozunurluk_y = Frame(None).winfo_screenheight()

            if x != None and y != None:
                self.x = x
                self.y = y
                self.analitik_x = x - int((self.cozunurluk_x - 245) / 2)
                self.analitik_y = y - int(self.cozunurluk_y / 2)
            elif analitik_x != None and analitik_y != None:
                self.analitik_x = analitik_x
                self.analitik_y = analitik_y
                self.x = analitik_x + int((self.cozunurluk_x - 245) / 2)
                self.y = analitik_y * -1 + int(self.cozunurluk_y / 2)
            else:
                raise Exception("Yanlış giriş!")

            self.koordinatlar = str(self.analitik_x) + AlanKatiliDogrular.ayirici + str(
                self.analitik_y * -1)


    ayirici = ", "


    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)

        self.canvas = Canvas(self, bg="gray")
        self.hud = Frame(self)

        self.cozunurluk_x = Frame(None).winfo_screenwidth()
        self.cozunurluk_y = Frame(None).winfo_screenheight()

        self.koor_frame = Frame(self.hud)

        self.koor_giren = StringVar()
        self.koor_giren.trace(W, self.onayla)

        self.koor_girdi = ttk.Entry(self.koor_frame, textvariable=self.koor_giren)

        self.koor_eklebuton = ttk.Button(self.koor_frame,
                                         text="KOORDİNAT NOKTASI EKLE",
                                         command=self.nokta_ekle)

        self.koor_scroll = ttk.Scrollbar(self.koor_frame)
        self.koor_liste = Listbox(self.koor_frame,
                                  height=5,
                                  state=DISABLED,
                                  font="Calibri 12 bold",
                                  yscrollcommand=self.koor_scroll.set)
        self.koor_scroll.config(command=self.koor_liste.yview)

        self.koor_sil_buton = ttk.Button(self.koor_frame,
                                    text="SON NOKTAYI KALDIR",
                                    command=self.nokta_kaldir)

        self.koor_tumunu_sil_buton = ttk.Button(self.koor_frame,
                                       text="TÜM NOKTALARI KALDIR",
                                       command=self.tum_noktalari_kaldir)

        self.ciz_buton = ttk.Button(self.koor_frame,
                                   text="ÇİZ",
                                   command=self.ciz)

        self.koor_girdi.bind("<Return>", self.nokta_ekle)
        self.canvas.bind("<Button-1>", self.fare_tiklama_aksiyonu)

        self.widget_yerlestir()
        self.canvasi_yenile()


    def fare_tiklama_aksiyonu(self, event):
        if not self.siniri_gecti_mi():
            AlanKatiliDogrular.Nokta.noktalar.append(
                AlanKatiliDogrular.Nokta(x=event.x, y=event.y))
            self.koor_liste.config(state=NORMAL)
            self.koor_liste.insert(
                END, AlanKatiliDogrular.Nokta.noktalar[-1].koordinatlar)
            self.koor_liste.config(state=DISABLED)
            self.canvasi_yenile(event)


    def canvasi_yenile(self, event=None):
        self.canvas.delete(ALL)
        for i in AlanKatiliDogrular.Nokta.noktalar:
            self.canvas.create_oval(
                i.x - 3,
                i.y - 3,
                i.x + 3,
                i.y + 3,
                fill="yellow")

        self.canvas.create_line(
            AlanKatiliDogrular.Nokta(analitik_x=self.cozunurluk_x, analitik_y=0).x,

            AlanKatiliDogrular.Nokta(analitik_x=self.cozunurluk_x, analitik_y=0).y,

            AlanKatiliDogrular.Nokta(analitik_x=self.cozunurluk_x * -1,
                                     analitik_y=0).x,

            AlanKatiliDogrular.Nokta(analitik_x=self.cozunurluk_x, analitik_y=0).y,

            fill="dark gray"
        )

        self.canvas.create_line(
            AlanKatiliDogrular.Nokta(analitik_x=0, analitik_y=self.cozunurluk_y).x,

            AlanKatiliDogrular.Nokta(analitik_x=0,
                                     analitik_y=self.cozunurluk_y * -1).y,

            AlanKatiliDogrular.Nokta(analitik_x=0, analitik_y=self.cozunurluk_y).x,

            AlanKatiliDogrular.Nokta(analitik_x=0, analitik_y=self.cozunurluk_y).y,

            fill="dark gray"
        )


    def ciz(self):
        for i in self.nokta_eslesmeleri():
            self.canvas.create_line(i[0][0], i[0][1], i[1][0], i[1][1])

    def onayla(self, *args):
        gecerliler = "1234567890-" + AlanKatiliDogrular.ayirici
        veri = self.koor_girdi.get()
        gecerli_mi = all(True if i in gecerliler else False for i in veri)
        if not gecerli_mi:
            self.koor_giren.set("".join(x for x in veri if x in gecerliler))


    def nokta_ekle(self, *args):
        if self.giris_gecerli_mi():
            if not self.siniri_gecti_mi():
                girdiler = self.koor_giren.get().split(AlanKatiliDogrular.ayirici)
                veri = [int(i) for i in girdiler]
                self.koor_liste.config(state=NORMAL)
                AlanKatiliDogrular.Nokta.noktalar.append(
                    AlanKatiliDogrular.Nokta(
                        analitik_x=veri[0], analitik_y=veri[1]
                    )
                )
                self.koor_liste.insert(END, self.koor_girdi.get())
                self.koor_liste.config(state=DISABLED)
                self.koor_girdi.delete(0, END)
                self.canvasi_yenile()
        else:
            msg.showwarning(
                ">- UYARI -<",
                "HATALI GİRİŞ YAPTINIZ !\nÖRNEK GİRİŞ: 300{}467".format(
                    AlanKatiliDogrular.ayirici))


    def nokta_eslesmeleri(self):
        koor_tumliste = [(i.x, i.y) for i in AlanKatiliDogrular.Nokta.noktalar]

        eslesmeler = list()

        try:
            for i in range(0, len(koor_tumliste)):
                eslesmeler.append((koor_tumliste[i], koor_tumliste[i + 1]))
        except IndexError:
            pass
        finally:
            try:
                eslesmeler.append((koor_tumliste[-1], koor_tumliste[0]))
            except IndexError:
                pass

        return eslesmeler


    def siniri_gecti_mi(self):
        if len(self.koor_liste.get(0, END)) < 4:
            return False
        else:
            msg.showwarning(
                ">- UYARI -<",
                "'ŞİMDİLİK' YALNIZCA ÜÇGEN VE\nKARE GİRİŞLERİ YAPABİLİRSİNİZ!")
            return True


    def giris_gecerli_mi(self):
        demo_canvas = Canvas(self)
        ayirici = AlanKatiliDogrular.ayirici
        try:
            demo_canvas.create_line(self.koor_giren.get().split(ayirici)[0],
                                    self.koor_giren.get().split(ayirici)[1],
                                    0, 0)
            del demo_canvas
            return True
        except (TclError, IndexError):
            del demo_canvas
            return False


    def nokta_kaldir(self):
        self.koor_liste.config(state=NORMAL)
        self.koor_liste.delete(END)
        self.koor_liste.config(state=DISABLED)
        self.canvas.delete(LAST)
        if len(AlanKatiliDogrular.Nokta.noktalar) > 0:
            AlanKatiliDogrular.Nokta.noktalar.pop()
        self.canvasi_yenile()


    def tum_noktalari_kaldir(self):
        self.koor_liste.config(state=NORMAL)
        for i in self.koor_liste.get(0, END):
            self.koor_liste.delete(END)
        self.koor_liste.config(state=DISABLED)
        AlanKatiliDogrular.Nokta.noktalar.clear()
        self.canvasi_yenile()


    def widget_yerlestir(self):
        self.canvas.pack(fill=BOTH, expand=TRUE, side=LEFT)
        self.hud.pack(fill=Y, side=RIGHT)

        self.koor_girdi.grid(row=0, column=0, columnspan=2, sticky=E + W, pady=1)
        self.koor_eklebuton.grid(row=1, column=0, columnspan=2, sticky=E + W,
                             pady=1)
        self.koor_liste.grid(row=2, column=0, sticky=E + W, pady=1)
        self.koor_scroll.grid(row=2, column=1, sticky=N + S, pady=1)
        self.koor_sil_buton.grid(row=3, column=0, columnspan=2,
                            sticky=E + W, pady=1)
        self.koor_tumunu_sil_buton.grid(row=4, column=0, columnspan=2, sticky=E + W,
                               pady=1)
        self.koor_frame.pack(side=RIGHT)

        ttk.Separator(self.koor_frame, orient=HORIZONTAL
                      ).grid(row=5, columnspan=2,pady=40)

        self.ciz_buton.grid(row=6, column=0, columnspan=2, sticky=E + W)


def main():
    root = Tk()
    root.title("ALAN KATİLİ DOĞRULAR")
    root.minsize(650, 400)

    g1 = AlanKatiliDogrular(root)
    g1.pack(fill=BOTH, expand=TRUE)

    root.mainloop()


if __name__ == '__main__':
    main()

Kodunuzda koordinat ekleme butonu ile nokta eklemesi yapamadım?

Ayiriciyi ‘,’ yerine ', ’ (virgülden sonra boşluk var) yaptığım için uyarı veriyor olabilir. Bu arada eklemeleri ‘enter’ tuşu ile de yapabilirsiniz.

Haklısınız , düzeldi.

Koda ekleme yapabilmek için tekrar anlamaya çalışmam gerekiyor. Ama bu sefer daha düzenli yazımışsınız, güzel. Bir önceki attığım koddan devam etsem sizin için problem olur mu? İstediğiniz bir özellik varsa oraya eklemek benim için daha rahat olacaktır. Veya siz benim kütle merkezini bulmakta kullandığım fonksiyonu kendi kodunuza ekleyebilirsiniz.

Bu arada nasıl oluyor bilmiyorum ancak az önce internette şuna rastladım (ki doğru çalışıyor) : analitik düzlemdeki ABC üçgeninin kütle merkezini şu şekilde (benim kullandığım yönteme kıyasla baya kolayca) hesaplayabiliyoruz:
A = (x1,y1)
B = (x2,y2)
C = (x3.y3)
ise
KütleMerkezi = ( (x1+x2+x3)/3 , (y1+y2+y3)/3 )

Ben de şimdi onu deniyordum :smiley:
burdan

1 Beğeni

Dörtgenler için de daha sonra eklemeye çalışacağım. İstiyorsanız siz kendiniz de yapmaya çalışın.

Dörtgenler ve beşgenler için de çalışacak hale getirdim. Dışbükey şekiller için çalışıyor ama içbükey şekiller için ne kadar doğru bilmiyorum. Yaptığım işlemler sırası ile şunlar:

  • Şekli üçgenlere böldüm
  • Üçgenlerin alanlarını Heron Alan Formülü ile buldum. Burada alanlarımız bizim için üçgenlerin kütlesi anlamına gelecek.
  • Daha sonra üçgenlerin kütle merkezlerinin, alanlarına göre ağırlıklı ortalamasını alarak şeklin kütle merkezini buldum.

Şimdi tek yapmamız gereken dörtgenler ve beşgenler için yaptığım işi bir döngü haline getirmek.

from tkinter import *
from tkinter import messagebox as msg
import tkinter.ttk as ttk
from math import sqrt

def uzunluk(nokta1,nokta2):
    """İki nokta arasındaki uzaklığı döndürür."""
    x = nokta1.x - nokta2.x
    y = nokta1.y - nokta2.y
    return sqrt(x**2+y**2)

def üçgenin_alanını_bul(*noktalar):
    a = uzunluk(noktalar[0],noktalar[1])
    b = uzunluk(noktalar[1],noktalar[2])
    c = uzunluk(noktalar[2],noktalar[0])
    u = (a+b+c)/2

    A = sqrt(u*(u-a)*(u-b)*(u-c))

    return A


def kütle_merkezi_bul(*noktalar):
    if len(noktalar) == 3:
        kütle_merkezi = (noktalar[0].x + noktalar[1].x + noktalar[2].x)/3,(noktalar[0].y + noktalar[1].y + noktalar[2].y)/3
    
        return kütle_merkezi
    elif len(noktalar) == 4:
        üçgen_1 , üçgen_2 = (noktalar[0],noktalar[1],noktalar[3]), (noktalar[1],noktalar[2],noktalar[3])
        alan1, alan2 = üçgenin_alanını_bul(*üçgen_1), üçgenin_alanını_bul(*üçgen_2)
        merkez1, merkez2 = kütle_merkezi_bul(*üçgen_1), kütle_merkezi_bul(*üçgen_2)

        return (merkez1[0]*alan1 + merkez2[0]*alan2)/(alan1+alan2), (merkez1[1]*alan1 + merkez2[1]*alan2)/(alan1+alan2)
    elif len(noktalar) == 5:
        üçgen_1 , üçgen_2 , üçgen_3 = (noktalar[0],noktalar[1],noktalar[2]), (noktalar[0],noktalar[2],noktalar[3]), (noktalar[0],noktalar[3],noktalar[4])
        alan1, alan2, alan3 = üçgenin_alanını_bul(*üçgen_1), üçgenin_alanını_bul(*üçgen_2), üçgenin_alanını_bul(*üçgen_3)
        merkez1, merkez2, merkez3 = kütle_merkezi_bul(*üçgen_1), kütle_merkezi_bul(*üçgen_2), kütle_merkezi_bul(*üçgen_3)

        return (merkez1[0]*alan1 + merkez2[0]*alan2 +  merkez3[0]*alan3)/(alan1+alan2+alan3), (merkez1[1]*alan1 + merkez2[1]*alan2 + merkez3[1]*alan3)/(alan1+alan2+alan3)

        

analitik_noktalar = []
noktalar = []
class Nokta:
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def __repr__(self):
        return "Nokta({},{})".format(self.x,self.y)


ayirici = ","
class MainFrame(Frame):

    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self.parent = parent

        self.canvas = Canvas(self, bg="gray")
        self.hud = Frame(self)


        self.kframe = Frame(self.hud)
        self.kgiren = StringVar()
        self.kgiren.trace(W, self.onayla)
        self.kgirdi = ttk.Entry(self.kframe, textvariable=self.kgiren)
        self.keklebuton = ttk.Button(self.kframe, text="EKLE", command=self.nokta_ekle)
        self.kscroll = ttk.Scrollbar(self.kframe)
        self.kliste = Listbox(
            self.kframe,
            height=5,
            state=DISABLED,
            font="Calibri 12 bold",
            yscrollcommand=self.kscroll.set)

        self.kscroll.config(command=self.kliste.yview)
        self.ksilbuton = ttk.Button(self.kframe, text="KALDIR", command=self.nokta_kaldir)
        self.ktumsilbuton = ttk.Button(
            self.kframe,
            text="TÜM NOKTALARI KALDIR",
            command=self.tum_noktaları_kaldir)

        self.cizbuton = ttk.Button(self.kframe, text="ÇİZ", command=self.ciz)


        self.kgirdi.bind("<Return>", self.nokta_ekle)
        self.canvas.bind("<Button-1>", self.click_action)

        self.pack_widgets()
        self.repack_canvas()

    def analitik_to_canvas(self,x,y):
        x += int((self.parent.winfo_screenwidth() - 181) / 2)
        y += int(self.parent.winfo_screenheight() / 2)
        return (x, y)

    def canvas_to_analitik(self,x,y):
        x -= int((self.parent.winfo_screenwidth() - 181) / 2)
        y -= int(self.parent.winfo_screenheight() / 2)
        return (x, -y)

    def click_action(self, event):
        if not self.siniri_gecti_mi():
            noktalar.append(Nokta(event.x,event.y))
            self.kliste.config(state=NORMAL)
            self.kliste.insert(END, str(self.canvas_to_analitik(event.x,event.y)))
            self.kliste.config(state=DISABLED)
            self.repack_canvas(event)
            analitik_noktalar.append(Nokta(*self.canvas_to_analitik(event.x,event.y)))


    def repack_canvas(self,event=None):
        self.canvas.delete(ALL)
        
        for i in noktalar:
            self.canvas.create_oval(
                i.x - 3,
                i.y - 3,
                i.x + 3,
                i.y + 3,
                fill="yellow")

        self.canvas.create_line(
            0,
            self.analitik_to_canvas(0,0)[1],
            self.parent.winfo_screenwidth(),
            self.analitik_to_canvas(0,0)[1],
            fill="dark gray"
        )

        self.canvas.create_line(
            self.analitik_to_canvas(0,0)[0],
            0,
            self.analitik_to_canvas(0,0)[0],
            self.parent.winfo_screenheight(),
            fill="dark gray"
        )


    def ciz(self):
        for i in self.koor_eslesmeler():
            self.canvas.create_line(i[0][0], i[0][1], i[1][0], i[1][1])
        merkez = kütle_merkezi_bul(*analitik_noktalar)
##        print(merkez)
        merkez = self.analitik_to_canvas(merkez[0],-merkez[1])
##        print(merkez)
        self.canvas.create_oval(merkez[0] -3,
                                merkez[1] -3,
                                merkez[0] +3,
                                merkez[1] +3,
                                fill="red"
                                )

    def onayla(self, *args):
        gecerliler = "1234567890-" + ayirici
        veri = self.kgirdi.get()
        gecerli_mi = all(True if i in gecerliler else False for i in veri)
        if not gecerli_mi:
            self.kgiren.set("".join(x for x in veri if x in gecerliler))


    def nokta_ekle(self, *args):
        if self.giris_gecerli_mi() and not self.siniri_gecti_mi():
            veri = self.kgiren.get().split(ayirici)
            analitik_noktalar.append(Nokta(int(veri[0]),int(veri[1])))
            noktalar.append(Nokta(*self.analitik_to_canvas(int(veri[0]),-int(veri[1]))))
            en = self.parent.winfo_screenwidth()
            boy = self.parent.winfo_screenheight()
            self.kliste.config(state=NORMAL)
            self.kliste.insert(END, self.kgirdi.get())
            self.kliste.config(state=DISABLED)
            self.kgirdi.delete(0, END)
            self.repack_canvas()
        else:
            msg.showwarning(
                ">- UYARI -<", "HATALI GİRİŞ YAPTINIZ !\nÖRNEK GİRİŞ: 300{}467".format(ayirici))


    def koor_eslesmeler(self):
        ktumliste = list()
        for i in noktalar:
            ktumliste.append((i.x, i.y))

        eslesmeler = list()

        try:
            for i in range(0, len(ktumliste)):
                eslesmeler.append((ktumliste[i], ktumliste[i+1]))
        except IndexError:
            pass
        finally:
            try:
                eslesmeler.append((ktumliste[-1], ktumliste[0]))
            except IndexError:
                pass

        return eslesmeler


    def siniri_gecti_mi(self):
        if len(self.kliste.get(0, END)) < 5:
            return False
        else:
            msg.showwarning(
                ">- UYARI -<",
                "'ŞİMDİLİK' YALNIZCA ÜÇGEN VE\nKARE GİRİŞLERİ YAPABİLİRSİNİZ!")
            return True


    def giris_gecerli_mi(self):
        demo_canvas = Canvas(self)
        try:
            demo_canvas.create_line(self.kgiren.get().split(",")[0],
                                    self.kgiren.get().split(",")[1],
                                    0, 0)
            del demo_canvas
            return True
        except (TclError, IndexError):
            del demo_canvas
            return False


    def nokta_kaldir(self):
        self.kliste.config(state=NORMAL)
        self.kliste.delete(END)
        self.kliste.config(state=DISABLED)
        self.canvas.delete(LAST)
        try:
            noktalar.pop()
            analitik_noktalar.pop()
        except IndexError: pass
        self.repack_canvas()


    def tum_noktaları_kaldir(self):
        self.kliste.config(state=NORMAL)
        for i in self.kliste.get(0, END):
            self.kliste.delete(END)
        self.kliste.config(state=DISABLED)
        noktalar.clear()
        analitik_noktalar.clear()
        self.repack_canvas()
  


    def pack_widgets(self):
        self.canvas.pack(fill=BOTH, expand=TRUE, side=LEFT)
        self.hud.pack(fill=Y, side=RIGHT)


        self.kgirdi.grid(row=0, column=0, columnspan=2, sticky=E+W, pady=1)
        self.keklebuton.grid(row=1, column=0, columnspan=2, sticky=E+W, pady=1)
        self.kliste.grid(row=2, column=0, sticky=E+W, pady=1)
        self.kscroll.grid(row=2, column=1, sticky=N+S, pady=1)
        self.ksilbuton.grid(row=3, column=0, columnspan=2, sticky=E+W, pady=1)
        self.ktumsilbuton.grid(row=4, column=0, columnspan=2, sticky=E+W, pady=1)
        self.kframe.pack(side=RIGHT)

        ttk.Separator(self.kframe, orient=HORIZONTAL).grid(row=5, columnspan=2, pady=40)

        self.cizbuton.grid(row=6, column=0, columnspan=2, sticky=E+W)


def main():
    root = Tk()
    root.title("PENCERE"*30)
    root.minsize(650, 400)
    root.geometry("{}x{}+0+0".format(root.winfo_screenwidth(),root.winfo_screenheight()-50))

    global g1
    g1 = MainFrame(root)
    g1.pack(fill=BOTH, expand=TRUE)


    root.mainloop()


if __name__ == '__main__':
    main()

Bu formül sadece üçgenler için mi geçerliydi

Evet. Diğer şekillerde çalışmıyor.

Peki bu formül kare için geçerli mi?

Geçerli değil. Kareyi de iki üçgene bölmek lazım.

Program bu hali ile kenar sınırı olmadan dışbükey şekillerin kütle merkezini buluyor, ancak içbükey şekilleri tam olarak bulamıyor. O da şekli üçgenlere ayrırken kullandığım algoritmadan kaynaklı:

from tkinter import *
from tkinter import messagebox as msg
import tkinter.ttk as ttk
from math import sqrt

def uzunluk(nokta1,nokta2):
    """İki nokta arasındaki uzaklığı döndürür."""
    x = nokta1.x - nokta2.x
    y = nokta1.y - nokta2.y
    return sqrt(x**2+y**2)

def üçgenin_alanını_bul(*noktalar):
    a = uzunluk(noktalar[0],noktalar[1])
    b = uzunluk(noktalar[1],noktalar[2])
    c = uzunluk(noktalar[2],noktalar[0])
    u = (a+b+c)/2

    A = sqrt(u*(u-a)*(u-b)*(u-c))

    return A    

def kütle_merkezi_bul(*noktalar):
    if len(noktalar) < 3:
        return False
    if len(noktalar) == 3:
        kütle_merkezi = (noktalar[0].x + noktalar[1].x + noktalar[2].x)/3,(noktalar[0].y + noktalar[1].y + noktalar[2].y)/3
    
        return kütle_merkezi
    else:
        üçgenler = []
        alanlar = []
        merkezler = []
        
        uzunluk = len(noktalar)
        for i in range(1,uzunluk-1):
            üçgenler.append((noktalar[0],noktalar[i],noktalar[i+1]))
            alanlar.append(üçgenin_alanını_bul(*üçgenler[-1]))
            merkezler.append(kütle_merkezi_bul(*üçgenler[-1]))

        toplam_alan = sum(alanlar)
        toplam_x = toplam_y = 0

        for merkez,alan in zip(merkezler,alanlar):
            toplam_x += merkez[0]*alan
            toplam_y += merkez[1]*alan

        return toplam_x / toplam_alan , toplam_y / toplam_alan

analitik_noktalar = []
noktalar = []
class Nokta:
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def __repr__(self):
        return "Nokta({},{})".format(self.x,self.y)


ayirici = ","
class MainFrame(Frame):

    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self.parent = parent

        self.canvas = Canvas(self, bg="gray")
        self.hud = Frame(self)


        self.kframe = Frame(self.hud)
        self.kgiren = StringVar()
        self.kgiren.trace(W, self.onayla)
        self.kgirdi = ttk.Entry(self.kframe, textvariable=self.kgiren)
        self.keklebuton = ttk.Button(self.kframe, text="EKLE", command=self.nokta_ekle)
        self.kscroll = ttk.Scrollbar(self.kframe)
        self.kliste = Listbox(
            self.kframe,
            height=5,
            state=DISABLED,
            font="Calibri 12 bold",
            yscrollcommand=self.kscroll.set)

        self.kscroll.config(command=self.kliste.yview)
        self.ksilbuton = ttk.Button(self.kframe, text="KALDIR", command=self.nokta_kaldir)
        self.ktumsilbuton = ttk.Button(
            self.kframe,
            text="TÜM NOKTALARI KALDIR",
            command=self.tum_noktaları_kaldir)

        self.cizbuton = ttk.Button(self.kframe, text="ÇİZ", command=self.ciz)


        self.kgirdi.bind("<Return>", self.nokta_ekle)
        self.canvas.bind("<Button-1>", self.click_action)

        self.pack_widgets()
        self.repack_canvas()

    def analitik_to_canvas(self,x,y):
        x += int((self.parent.winfo_screenwidth() - 181) / 2)
        y += int(self.parent.winfo_screenheight() / 2)
        return (x, y)

    def canvas_to_analitik(self,x,y):
        x -= int((self.parent.winfo_screenwidth() - 181) / 2)
        y -= int(self.parent.winfo_screenheight() / 2)
        return (x, -y)

    def click_action(self, event):
        if not self.siniri_gecti_mi():
            noktalar.append(Nokta(event.x,event.y))
            self.kliste.config(state=NORMAL)
            self.kliste.insert(END, str(self.canvas_to_analitik(event.x,event.y)))
            self.kliste.config(state=DISABLED)
            self.repack_canvas(event)
            analitik_noktalar.append(Nokta(*self.canvas_to_analitik(event.x,event.y)))


    def repack_canvas(self,event=None):
        self.canvas.delete(ALL)
        
        for i in noktalar:
            self.canvas.create_oval(
                i.x - 3,
                i.y - 3,
                i.x + 3,
                i.y + 3,
                fill="yellow")

        self.canvas.create_line(
            0,
            self.analitik_to_canvas(0,0)[1],
            self.parent.winfo_screenwidth(),
            self.analitik_to_canvas(0,0)[1],
            fill="dark gray"
        )

        self.canvas.create_line(
            self.analitik_to_canvas(0,0)[0],
            0,
            self.analitik_to_canvas(0,0)[0],
            self.parent.winfo_screenheight(),
            fill="dark gray"
        )


    def ciz(self):
        for i in self.koor_eslesmeler():
            self.canvas.create_line(i[0][0], i[0][1], i[1][0], i[1][1])
        if len(analitik_noktalar) < 3: return False
        merkez = kütle_merkezi_bul(*analitik_noktalar)
        merkez = self.analitik_to_canvas(merkez[0],-merkez[1])
        self.canvas.create_oval(merkez[0] -3,
                                merkez[1] -3,
                                merkez[0] +3,
                                merkez[1] +3,
                                fill="red"
                                )

    def onayla(self, *args):
        gecerliler = "1234567890-" + ayirici
        veri = self.kgirdi.get()
        gecerli_mi = all(True if i in gecerliler else False for i in veri)
        if not gecerli_mi:
            self.kgiren.set("".join(x for x in veri if x in gecerliler))


    def nokta_ekle(self, *args):
        if self.giris_gecerli_mi() and not self.siniri_gecti_mi():
            veri = self.kgiren.get().split(ayirici)
            analitik_noktalar.append(Nokta(int(veri[0]),int(veri[1])))
            noktalar.append(Nokta(*self.analitik_to_canvas(int(veri[0]),-int(veri[1]))))
            en = self.parent.winfo_screenwidth()
            boy = self.parent.winfo_screenheight()
            self.kliste.config(state=NORMAL)
            self.kliste.insert(END, self.kgirdi.get())
            self.kliste.config(state=DISABLED)
            self.kgirdi.delete(0, END)
            self.repack_canvas()
        else:
            msg.showwarning(
                ">- UYARI -<", "HATALI GİRİŞ YAPTINIZ !\nÖRNEK GİRİŞ: 300{}467".format(ayirici))


    def koor_eslesmeler(self):
        ktumliste = list()
        for i in noktalar:
            ktumliste.append((i.x, i.y))

        eslesmeler = list()

        try:
            for i in range(0, len(ktumliste)):
                eslesmeler.append((ktumliste[i], ktumliste[i+1]))
        except IndexError:
            pass
        finally:
            try:
                eslesmeler.append((ktumliste[-1], ktumliste[0]))
            except IndexError:
                pass

        return eslesmeler


    def siniri_gecti_mi(self):
        if len(self.kliste.get(0, END)) < 20:
            return False
        else:
            msg.showwarning(
                ">- UYARI -<",
                "'ŞİMDİLİK' YALNIZCA ÜÇGEN VE\nKARE GİRİŞLERİ YAPABİLİRSİNİZ!")
            return True


    def giris_gecerli_mi(self):
        demo_canvas = Canvas(self)
        try:
            demo_canvas.create_line(self.kgiren.get().split(",")[0],
                                    self.kgiren.get().split(",")[1],
                                    0, 0)
            del demo_canvas
            return True
        except (TclError, IndexError):
            del demo_canvas
            return False


    def nokta_kaldir(self):
        self.kliste.config(state=NORMAL)
        self.kliste.delete(END)
        self.kliste.config(state=DISABLED)
        self.canvas.delete(LAST)
        try:
            noktalar.pop()
            analitik_noktalar.pop()
        except IndexError: pass
        self.repack_canvas()


    def tum_noktaları_kaldir(self):
        self.kliste.config(state=NORMAL)
        for i in self.kliste.get(0, END):
            self.kliste.delete(END)
        self.kliste.config(state=DISABLED)
        noktalar.clear()
        analitik_noktalar.clear()
        self.repack_canvas()
  


    def pack_widgets(self):
        self.canvas.pack(fill=BOTH, expand=TRUE, side=LEFT)
        self.hud.pack(fill=Y, side=RIGHT)


        self.kgirdi.grid(row=0, column=0, columnspan=2, sticky=E+W, pady=1)
        self.keklebuton.grid(row=1, column=0, columnspan=2, sticky=E+W, pady=1)
        self.kliste.grid(row=2, column=0, sticky=E+W, pady=1)
        self.kscroll.grid(row=2, column=1, sticky=N+S, pady=1)
        self.ksilbuton.grid(row=3, column=0, columnspan=2, sticky=E+W, pady=1)
        self.ktumsilbuton.grid(row=4, column=0, columnspan=2, sticky=E+W, pady=1)
        self.kframe.pack(side=RIGHT)

        ttk.Separator(self.kframe, orient=HORIZONTAL).grid(row=5, columnspan=2, pady=40)

        self.cizbuton.grid(row=6, column=0, columnspan=2, sticky=E+W)


def main():
    root = Tk()
    root.title("PENCERE"*30)
    root.minsize(650, 400)
    root.geometry("{}x{}+0+0".format(root.winfo_screenwidth(),root.winfo_screenheight()-50))

    global g1
    g1 = MainFrame(root)
    g1.pack(fill=BOTH, expand=TRUE)


    root.mainloop()


if __name__ == '__main__':
    main()

Ben de bitirdim diye sevinmiştim :frowning: https://paste.ubuntu.com/p/dCfC5dgn69/

Acaba buna

bunu nasıl ekleyebilirim. Sizin kodunuzdaki fonksiyonları ekleyip hata aldığım yerleri değiştirmeye çalıştım ama işin içinden çıkamadım.

Sanırım benim x ve y ismi ile kullandığım nitelikleri siz analitik_x ve analitik_y olarak kullanmışsınız. Benim uzunluk ve kütle_merkezi_bul fonksiyonumda onları kendinize göre değiştirirseniz çalışır diye tahmin ediyorum.

Sizin kodunuzda gerekli değişiklikleri yaptım. Kodunuzu daha düzenli hale getirmişsiniz ama geometrik hatalarınız vardı. Ancak Nokta sınıfının __init__ metodunun parametre seçimi hala kötü durumda, bir sürü ön tanımlı parametre vereceğinize iki ayrı inşa edici metod oluşturabilirdiniz. Programı bu haline getirene kadar birbirimizden ayrı çalıştık, yaptıklarımızı birbirimizin koduna eklemekle uğraştık. Aramızda iletişimsizlik oldu :slightly_smiling_face:. Bir dahakine daha koordinasyonlu çalışmalıyız. Örneğin bütün fonksiyonlara açıklama yazmamız iyi olur. Ayrıca aynı kodu geliştirmemiz daha isabetli olacaktır.

from tkinter import *
from tkinter import messagebox as msg
import tkinter.ttk as ttk
from math import sqrt

class AlanKatiliDogrular(Frame):

    class KoorGirdisi(ttk.Entry):
        def __init__(self, parent, *args, **kwargs):
            super().__init__(parent, *args, **kwargs)
            self.koor_giren = StringVar()
            self.koor_giren.trace(W, self.onayla)
            self.config(textvariable=self.koor_giren)


        def onayla(self, *args):
            gecerliler = "1234567890-"
            veri = self.get()
            gecerli_mi = all(True if i in gecerliler else False for i in veri)
            if not gecerli_mi:
                self.koor_giren.set("".join(x for x in veri if x in gecerliler))


    class KoorFrame(Frame):
        def __init__(self, parent, *args, **kwargs):
            super().__init__(parent, *args, **kwargs)
            self.bilgi_x = ttk.Label(self, text="X Ekseni: ")
            self.girdi_x = AlanKatiliDogrular.KoorGirdisi(self, width=5)

            self.bilgi_y = ttk.Label(self, text="Y Ekseni: ")
            self.girdi_y = AlanKatiliDogrular.KoorGirdisi(self, width=5)

            self.widget_yerlestir()


        def widget_yerlestir(self):
            self.bilgi_x.grid(row=0, column=0)
            self.girdi_x.grid(row=0, column=1)

            self.grid_columnconfigure(2, minsize=15)

            self.bilgi_y.grid(row=0, column=3)
            self.girdi_y.grid(row=0, column=4)


        def giris_gecerli_mi(self):
            demo_canvas = Canvas(self)
            try:
                demo_canvas.create_line(*self.girdi_al(), 0, 0)
                del demo_canvas
                return True
            except (TclError, IndexError):
                del demo_canvas
                msg.showwarning("UYARI", "Hatalı giriş yaptınız !")
                return False


        def girdi_al(self):
            girdiler = list()
            girdiler.append(self.girdi_x.get())
            girdiler.append(self.girdi_y.get())
            return girdiler


        def girdi_sil(self):
            self.girdi_x.delete(0, END)
            self.girdi_y.delete(0, END)


    class Nokta:
        noktalar = list()

        def __init__(self, x=None, y=None, analitik_x=None, analitik_y=None):
            self.cozunurluk_x = 1150
            self.cozunurluk_y = 700
            hud_araligi_x = 197

            if x is not None and y is not None:
                self.x = x
                self.y = y
                self.analitik_x = x - int(
                    (self.cozunurluk_x - hud_araligi_x) / 2
                )
                self.analitik_y = -(y - int(self.cozunurluk_y / 2))
            elif analitik_x is not None and analitik_y is not None:
                self.analitik_x = analitik_x
                self.analitik_y = analitik_y
                self.x = analitik_x + int(
                    (self.cozunurluk_x - hud_araligi_x) / 2
                )
                self.y = analitik_y * -1 + int(self.cozunurluk_y / 2)
            else:
                raise Exception("Yanlış giriş!")

            self.bilgi = "( {0}, {1} )".format(
                self.analitik_x, self.analitik_y)

            self.koordinatlar = self.x, self.y

        def __repr__(self):
            return "Nokta <{},{}>, <{},{}>".format(self.x,self.y,self.analitik_x,self.analitik_y)


    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)

        self.canvas = Canvas(self, bg="gray")
        self.hud = Frame(self)

        self.isin_kaynagi = AlanKatiliDogrular.Nokta(x=-37, y=-37)

        self.cozunurluk_x = 1150
        self.cozunurluk_y = 700

        self.koor_ana_frame = Frame(self.hud)



        self.koor_ekle_frame = LabelFrame(
            self.koor_ana_frame, text="Koordinat Noktası Ekleme")
        self.koor_girdiler = AlanKatiliDogrular.KoorFrame(self.koor_ekle_frame)

        self.koor_ekle_buton = ttk.Button(self.koor_ekle_frame,
                                          text="KOORDİNAT NOKTASI EKLE",
                                          command=self.nokta_ekle)



        self.koor_liste_frame = LabelFrame(self.koor_ana_frame,
                                           text="Koordinat Listesi")
        self.koor_scroll = ttk.Scrollbar(self.koor_liste_frame)
        self.koor_liste = Listbox(self.koor_liste_frame,
                                  height=5,
                                  state=DISABLED,
                                  font="Calibri 12 bold",
                                  yscrollcommand=self.koor_scroll.set)
        self.koor_scroll.config(command=self.koor_liste.yview)
        self.koor_sil_buton = ttk.Button(self.koor_liste_frame,
                                         text="SON NOKTAYI KALDIR",
                                         command=self.nokta_kaldir)
        self.koor_tumunu_sil_buton = ttk.Button(
            self.koor_liste_frame,
            text="TÜM NOKTALARI KALDIR",
            command=self.tum_noktalari_kaldir)



        self.isin_kaynagi_frame = LabelFrame(
            self.koor_ana_frame, text="Işın Kaynağının Koordinatları")

        self.isin_kaynagi_girdiler = AlanKatiliDogrular.KoorFrame(
            self.isin_kaynagi_frame)

        self.isin_kaynagi_konumlandir_buton = ttk.Button(
            self.isin_kaynagi_frame, text="YENİDEN KONUMLANDIR",
            command=self.isin_y_enter_event
        )


        self.ciz_frame = LabelFrame(self.koor_ana_frame,
                                    text="İşlemi Başlatma")
        self.ciz_buton = ttk.Button(self.ciz_frame,
                                    text="ÇİZ",
                                    command=self.ciz)

        self.koor_girdiler.girdi_x.bind("<Return>", self.girdi_x_enter_event)
        self.koor_girdiler.girdi_y.bind("<Return>", self.girdi_y_enter_event)

        self.isin_kaynagi_girdiler.girdi_x.bind("<Return>", self.isin_x_enter_event)
        self.isin_kaynagi_girdiler.girdi_y.bind("<Return>",self.isin_y_enter_event)

        self.canvas.bind("<Button-1>", self.sol_tik_aksiyonu)
        self.canvas.bind("<Button-3>", self.sag_tik_aksiyonu)
        self.canvas.bind("<B3-Motion>", self.sag_tik_aksiyonu)

        self.widget_yerlestir()
        self.canvasi_yenile()


    def girdi_x_enter_event(self, *args):
        self.koor_girdiler.girdi_y.focus()


    def girdi_y_enter_event(self, *args):
        self.nokta_ekle()
        self.koor_girdiler.girdi_x.focus()


    def isin_x_enter_event(self, *args):
        self.isin_kaynagi_girdiler.girdi_y.focus()


    def isin_y_enter_event(self, *args):
        self.isin_kaynagi_konumlandir()
        self.canvas.focus()


    def isin_kaynagi_konumlandir(self):
        if self.isin_kaynagi_girdiler.giris_gecerli_mi():
            konum = [int(i) for i in self.isin_kaynagi_girdiler.girdi_al()]
            self.isin_kaynagi.__init__(analitik_x=konum[0],
                                       analitik_y=konum[1])
            self.isin_kaynagi_girdiler.girdi_sil()
            self.isin_kaynagi_girdiler.girdi_x.focus()
            self.canvasi_yenile()


    def sag_tik_aksiyonu(self, event):
        self.isin_kaynagi.__init__(x=event.x, y=event.y)

        self.canvasi_yenile()


    def sol_tik_aksiyonu(self, event):
        AlanKatiliDogrular.Nokta.noktalar.append(
            AlanKatiliDogrular.Nokta(x=event.x, y=event.y))
        self.koor_liste.config(state=NORMAL)
        self.koor_liste.insert(
            END, AlanKatiliDogrular.Nokta.noktalar[-1].bilgi)
        self.koor_liste.config(state=DISABLED)
        self.canvasi_yenile(event)


    @staticmethod
    def agirlik_merkezi_bul(noktalar):
        if len(noktalar) < 3:
            return False
        if len(noktalar) == 3:
            kütle_merkezi = (noktalar[0].analitik_x + noktalar[1].analitik_x + noktalar[2].analitik_x)/3,(noktalar[0].analitik_y + noktalar[1].analitik_y + noktalar[2].analitik_y)/3
            
            return kütle_merkezi
        else:
            def üçgenin_alanını_bul(*noktalar):
                a = uzunluk_bul(noktalar[0],noktalar[1])
                b = uzunluk_bul(noktalar[1],noktalar[2])
                c = uzunluk_bul(noktalar[2],noktalar[0])
                u = (a+b+c)/2

                A = sqrt(u*(u-a)*(u-b)*(u-c))

                return A

            def uzunluk_bul(nokta1,nokta2):
                """İki nokta arasındaki uzaklığı döndürür."""
                x = nokta1.analitik_x - nokta2.analitik_x
                y = nokta1.analitik_y - nokta2.analitik_y
                return sqrt(x**2+y**2)
            
            üçgenler = []
            alanlar = []
            merkezler = []
            
            uzunluk = len(noktalar)
            for i in range(1,uzunluk-1):
                üçgenler.append((noktalar[0],noktalar[i],noktalar[i+1]))
                alanlar.append(üçgenin_alanını_bul(*üçgenler[-1]))
                merkezler.append(AlanKatiliDogrular.agirlik_merkezi_bul(üçgenler[-1]))

            toplam_alan = sum(alanlar)
            toplam_x = toplam_y = 0

            for merkez,alan in zip(merkezler,alanlar):
                toplam_x += merkez[0]*alan
                toplam_y += merkez[1]*alan
            
            return toplam_x / toplam_alan , toplam_y / toplam_alan
##        n = len(AlanKatiliDogrular.Nokta.noktalar)
##
##        toplam_x = 0
##        toplam_y = 0
##
##        for nokta in AlanKatiliDogrular.Nokta.noktalar:
##            toplam_x += nokta.x
##            toplam_y += nokta.y
##
##        ortalama_x = toplam_x / n
##        ortalama_y = toplam_y / n
##
##        return ortalama_x, ortalama_y

    def canvasi_yenile(self, *args):
        self.canvas.delete(ALL)
        for i in AlanKatiliDogrular.Nokta.noktalar:
            self.canvas.create_oval(i.x - 3, i.y - 3, i.x + 3, i.y + 3,
                                    fill="yellow")

        self.canvas.create_oval(self.isin_kaynagi.x - 3,
                                self.isin_kaynagi.y - 3,
                                self.isin_kaynagi.x + 3,
                                self.isin_kaynagi.y + 3,
                                fill="red")

        self.canvas.create_line(
            *AlanKatiliDogrular.Nokta(
                analitik_x=self.cozunurluk_x, analitik_y=0
            ).koordinatlar,

            *AlanKatiliDogrular.Nokta(
                analitik_x=self.cozunurluk_x * -1, analitik_y=0
            ).koordinatlar,

            fill="dark gray"
        )

        self.canvas.create_line(
            *AlanKatiliDogrular.Nokta(
                analitik_x=0, analitik_y=self.cozunurluk_y * -1
            ).koordinatlar,

            *AlanKatiliDogrular.Nokta(
                analitik_x=0, analitik_y=self.cozunurluk_y
            ).koordinatlar,

            fill="dark gray"
        )


    def ciz(self):
        if len(self.koor_liste.get(0, END)) > 0:
            if self.isin_kaynagi.x == -37 and self.isin_kaynagi.y == -37:
                msg.showwarning(
                    "UYARI",
                    "Lütfen koordinat sistemi üzerine sağ tıklayarak veya\n"
                    "ışın kaynağının koordinatlarını değiştirme menüsünü\n"
                    "kullanarak şeklin alanını ikiye bölecek ışının\n"
                    "başlangıç noktasını belirleyin !"
                )
            else:
                for i in self.nokta_eslesmeleri():
                    self.canvas.create_line(i[0][0], i[0][1], i[1][0], i[1][1])
                self.isin_hedef()

        else:
            msg.showwarning(
                "UYARI",
                "Lütfen koordinat sistemi üzerine sol tıklayarak veya\n"
                "koordinat noktası ekleme menüsünü kullanarak\n"
                "koordinat girişi yapınız !"
            )


    def isin_hedef(self):
        merkez = list(self.agirlik_merkezi_bul(AlanKatiliDogrular.Nokta.noktalar))
        print(merkez)
        kaynak = AlanKatiliDogrular.Nokta(self.isin_kaynagi.x,self.isin_kaynagi.y)
        
        artış = merkez[0] - kaynak.analitik_x, merkez[1] - kaynak.analitik_y

        merkez[0] += artış[0]*100
        merkez[1] += artış[1]*100
        kaynak.analitik_x -= artış[0]*100

        kaynak.analitik_y -= artış[1]*100

        def analitiği_canvasa_çevir(x,y):
            self.cozunurluk_x = 1150
            self.cozunurluk_y = 700
            hud_araligi_x = 197
            x = x + int((self.cozunurluk_x - hud_araligi_x) / 2)
            y = y *-1 + int(self.cozunurluk_y / 2)
            return x,y
        
        merkez = analitiği_canvasa_çevir(*merkez)
        kaynak.analitik_x, kaynak.analitik_y = analitiği_canvasa_çevir(kaynak.analitik_x, kaynak.analitik_y)

        self.canvas.create_line(*merkez,
                                kaynak.analitik_x,
                                kaynak.analitik_y,
                                fill="purple")
        
    def nokta_ekle(self, *args):
        if self.koor_girdiler.giris_gecerli_mi():
            girdiler = self.koor_girdiler.girdi_al()
            veri = [int(i) for i in girdiler]
            self.koor_liste.config(state=NORMAL)
            AlanKatiliDogrular.Nokta.noktalar.append(
                AlanKatiliDogrular.Nokta(
                    analitik_x=veri[0], analitik_y=veri[1]
                )
            )
            self.koor_liste.insert(
                END,
                AlanKatiliDogrular.Nokta.noktalar[-1].bilgi
            )
            self.koor_liste.config(state=DISABLED)
            self.koor_girdiler.girdi_sil()
            self.canvasi_yenile()


    @staticmethod
    def nokta_eslesmeleri():
        koor_tumliste = [(i.x, i.y) for i in AlanKatiliDogrular.Nokta.noktalar]

        eslesmeler = list()

        try:
            for i in range(0, len(koor_tumliste)):
                eslesmeler.append((koor_tumliste[i], koor_tumliste[i + 1]))
        except IndexError:
            pass
        finally:
            try:
                eslesmeler.append((koor_tumliste[-1], koor_tumliste[0]))
            except IndexError:
                pass

        return eslesmeler


    def nokta_kaldir(self):
        self.koor_liste.config(state=NORMAL)
        self.koor_liste.delete(END)
        self.koor_liste.config(state=DISABLED)
        self.canvas.delete(LAST)
        if len(AlanKatiliDogrular.Nokta.noktalar) > 0:
            AlanKatiliDogrular.Nokta.noktalar.pop()
        self.canvasi_yenile()


    def tum_noktalari_kaldir(self):
        self.koor_liste.config(state=NORMAL)
        self.koor_liste.delete(0, END)
        self.koor_liste.config(state=DISABLED)
        AlanKatiliDogrular.Nokta.noktalar.clear()
        self.canvasi_yenile()


    def widget_yerlestir(self):
        self.canvas.pack(fill=BOTH, expand=TRUE, side=LEFT)
        self.hud.pack(fill=Y, side=RIGHT)
        self.koor_ana_frame.pack(side=RIGHT)

        self.koor_ekle_frame.grid(row=0, sticky=N+S+E+W, ipady=2)
        self.koor_ana_frame.grid_rowconfigure(1, minsize=20)

        self.koor_liste_frame.grid(row=2, sticky=N+S+E+W, ipady=2)
        self.koor_ana_frame.grid_rowconfigure(3, minsize=20)

        self.isin_kaynagi_frame.grid(row=4, sticky=N+S+E+W, ipady=2)
        self.koor_ana_frame.grid_rowconfigure(5, minsize=20)

        self.ciz_frame.grid(row=6, sticky=N+S+E+W, ipady=2)


        self.koor_girdiler.grid(
            row=0, column=0, columnspan=2, sticky=E + W, pady=1
        )

        self.koor_ekle_buton.grid(
            row=1, column=0, columnspan=2, sticky=E + W, pady=1
        )

        self.koor_liste.grid(
            row=0, column=0, sticky=E + W, pady=1
        )
        self.koor_scroll.grid(
            row=0, column=1, sticky=N + S, pady=1
        )
        self.koor_sil_buton.grid(
            row=1, column=0, columnspan=2, sticky=E + W, pady=1
        )
        self.koor_tumunu_sil_buton.grid(
            row=2, column=0, columnspan=2, sticky=E + W, pady=1
        )

        self.isin_kaynagi_girdiler.grid(
            row=0, column=0, sticky=E + W, pady=1
        )
        self.isin_kaynagi_konumlandir_buton.grid(
            row=1, column=0, sticky=E + W, pady=1
        )

        self.ciz_buton.pack(fill=X, expand=TRUE)


def main():
    root = Tk()
    root.title("ALAN KATİLİ DOĞRULAR")
    root.geometry("1150x700")
    root.resizable(FALSE, FALSE)
    root.protocol("WM_DELETE_WINDOW", quit)

    g1 = AlanKatiliDogrular(root)
    g1.pack(fill=BOTH, expand=TRUE)

    root.mainloop()


if __name__ == '__main__':
    main()

Sanırım şöyle çok küçük bir sıkıntımız var:
Cismin kütle merkezinden geçen tüm doğrular şeklin alanını ikiye bölmüyormuş :confused:

Olsun yine de bir şeyler öğrendik :smiley:
O zaman alanı ikiye bölecek yolu bulmalıyız.

Cismin kütle merkezinden geçen tüm doğrular şeklin alanını ikiye bölmüyormuş

Bunu nerden öğrendiniz?

Deneyince sağlamadığını gördüm. Biraz geç oldu ama :slight_smile:

Eğer birkaç şekil çizip göz kararı denediyseniz fotoğraf ekleyebilir misiniz?