การติดตามตำแหน่งเมาส์ใน Tkinter ใช้ Event Binding bind(' ฟังก์ชัน Callback จะได้รับ Event Object ที่มี attribute x, y (พิกัดใน Widget) และ x_root, y_root (พิกัดหน้าจอ)
ขั้นตอนการทำงาน
- นำเข้า
tkinter - สร้าง Root Window
- กำหนด Callback Function รับ Event Parameter
- ดึงพิกัดจาก
event.xและevent.y - ผูก Event
'กับ Window' - รัน
mainloop()
ตัวอย่างโค้ด
from tkinter import *
win = Tk()
win.geometry("750x250")
def callback(e):
x = e.x
y = e.y
print(f"Pointer is currently at {x}, {y}")
win.bind('', callback)
win.mainloop()
Event Object Attributes สำคัญ
| Attribute | คำอธิบาย |
|---|---|
event.x, event.y | พิกัดใน Widget (relative) |
event.x_root, event.y_root | พิกัดบนหน้าจอ (absolute) |
event.widget | Widget ที่เกิด Event |
event.time | Timestamp (milliseconds) |
event.state | Modifier keys state (Shift, Ctrl, Alt) |
ตัวอย่างประยุกต์: แสดงพิกัด Real-time ใน Label
from tkinter import *
win = Tk()
win.geometry("400x300")
coord_label = Label(win, text="X: 0, Y: 0", font=('Consolas', 14))
coord_label.pack(pady=20)
def update_coords(event):
coord_label.config(text=f"Widget: ({event.x}, {event.y})\nScreen: ({event.x_root}, {event.y_root})")
win.bind('', update_coords)
win.mainloop()
การใช้กับ Canvas (Drawing App)
canvas = Canvas(win, bg='white', width=600, height=400)
canvas.pack()
last_x, last_y = None, None
def start_draw(event):
global last_x, last_y
last_x, last_y = event.x, event.y
def draw(event):
global last_x, last_y
canvas.create_line(last_x, last_y, event.x, event.y, width=2)
last_x, last_y = event.x, event.y
canvas.bind('', start_draw)
canvas.bind('', draw)
การประยุกต์ใช้
พื้นฐานของ: Drawing apps, Games, Screen savers, Mouse tracking analytics, Tooltip positioning, Drag & Drop, Custom cursor effects