import tkinter as tk
import tkinter.ttk as ttk
from tkinter import Canvas
import math
pencere = tk.Tk()
pencere.title("Koordinat Sistemi")
X = 800
Y = 600
can = Canvas(pencere, width=X+1, height=Y+1, bg="white")
can.pack()
can.create_rectangle(800, 600, can.winfo_width(), can.winfo_height(), fill="white")
can.create_line(0, 300, 800, 300, fill="black", width=2, arrow=tk.BOTH)
can.create_line(400, 0, 400, 600, fill="black", width=2, arrow=tk.BOTH)
width = 800
height = 600
cell_size = 25 # Her bir hücrenin boyutu
# Dikey çizgileri çizme
for x in range(0, 800, cell_size):
can.create_line(x, 0, x, height, fill="black",dash=(4, 2))
# Yatay çizgileri çizme
for y in range(0, 600, cell_size):
can.create_line(0, y, width, y, fill="black",dash=(4, 2))
# nokta oluşturmak
ov_size=(6,6)
def get_oval_centre(coords):
x = (coords[0] + coords[2])//2
y = (coords[1] + coords[3])//2
return [x,y]
def set_oval_coords(t, xy):
x,y = xy
can.coords(t, (x-5, y-5, x+5, y+5) )
def evn(e):
xx = can.canvasx(e.x)
yy = can.canvasy(e.y)
#cc = c.find_closest(xx,yy)
t = can.find_withtag('point')
#c.move(t, 20,20)
#print(c.find_all())
#c.itemconfig(t, )
oc = get_oval_centre(can.bbox(t))
oc[0] += cell_size
oc[1] += cell_size
def mot(e):
xg = (e.x+cell_size/2)//cell_size
yg = (e.y+cell_size/2)//cell_size
t = can.find_withtag('point')
set_oval_coords(t, (xg*cell_size, yg*cell_size))
# Fare imlecinin yeni konumunu ekrana yazdır
print(f"Fare İmleci Konumu: ({xg-16}, {(yg-abs(12))*-1})")
# Label içeriğini güncelle
mouse_position_label.config(text=f"X: Y: ({xg-16}, {(yg-abs(12))*-1})")
mouse_position_label.pack(side="bottom") # Metni sola hizala
# Fare pozisyonunu gösterecek Label widget'ı oluştur
mouse_position_label = tk.Label(pencere, text="X: Y: (0, 0)", font=("Helvetica", 14))
mouse_position_label.pack(pady=25)
mouse_position_label.pack(side="left") # Metni sola hizala
#Fare Tıklama Olayı
can.bind('<Button-1>', evn)
can.bind('<Motion>', mot)
ov = can.create_oval(-3,-3, 3, 3, tags='point', fill='red')
def fare_konumunu_guncelle(event):
x = (event.x + cell_size / 2) // cell_size - 16
y = ((event.y + cell_size / 2) // cell_size - abs(12)) * -1
fare_konumu_etiketi.config(text=f"Fare Konumu: x={x}, y={y}")
# En yakın 25 pixel aralıklı noktanın koordinatlarını bul
nearest_x = round(event.x / 25) * 25
nearest_y = round(event.y / 25) * 25
# Canvas üzerine nokta çiz
can.create_oval(nearest_x - 10, nearest_y - 10, nearest_x + 10, nearest_y + 10, outline="red")
fare_konumu_etiketi = tk.Label(pencere, text="Fare Konumu: x=0, y=0", font=("Helvetica", 14))
fare_konumu_etiketi.pack(pady=20)
# Fare hareketlerini dinlemek için canvas'a bağlanma
can.bind("<Button-1>", fare_konumunu_guncelle)
pencere.mainloop()