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()