Python tkinter ile koordinat sistemi oluşturmak

omsal

Üye
Katılım
26 Ocak 2024
Mesajlar
14
Bir özellik eklemek istiyorum mesela fare imleci karelerin köşelerine geldiğinde oralara takılsın yanı orda 1 saniye falan dursun sonra geri hareketimi sağlamak istiyorum bunu nasıl yapabilirim ?
 

Ekler

  • 2.png
    2.png
    146.3 KB · Görüntüleme: 80
Teşekkür ederim.
Hocam şimdide noktanın kordinatlarını almam gerekiyor ama program farenin kordinatlarını veriyor bunu nasıl ayarlayabilirim ?


yaptım ama şimdide orta nokta y -0.0 gösteriyor sebep ne olabilir ?
 

Ekler

  • 3.png
    3.png
    136.6 KB · Görüntüleme: 63
Son düzenleme:
KOD BU ARKADAŞLAR

python tkinter kordinat sistemi:
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()
 
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})")
def env ve def mot fonksiyonları arasında bazı sorunlar var bunları halledersen kodun cok daha akıcı olur.
 

Forum istatistikleri

Konular
7,108
Mesajlar
121,064
Üyeler
2,880
Son üye
onur1986

Son kaynaklar

Son profil mesajları

az bilgili çok meraklı
Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Back
Top