Events and Bindings
คำสั่ง mainloop() มีไว้สำหรับรันลูปไปเรื่อยๆ เพื่อดักจับเหตุการณ์ที่เกิดจากผู้ใช้คลิกเมาส์หรือกดแป้นคีย์บอร์ด เหตุการณ์เหล่านี้เรียกว่า events เราสามารถเขียนโค้ดเพื่อสั่งให้ tkinter รันฟังก์ชันอะไรก็ได้เมื่อ events เกิดขึ้น
from tkinter import *
root = Tk()
def callback(event):
print("clicked at", event.x, event.y)
frame = Frame(root, width=100, height=100)
frame.bind("<Button-1>", callback)
frame.pack()
root.mainloop()
คำอธิบายโค้ด
คำสั่ง bind
เป็น method ของ widget เมื่อเรียกใช้คำสั่ง bind
กับ widget ใด เราบอกให้ tkinter เฝ้าดู widget นั้นว่ามีเหตุการณ์อะไรเกิดขึ้นหรือไม่ และเหตุการณ์นั้นคืออะไร
frame.bind("<Button-1>", callback)
ตัวอย่างเช่นในคำสั่งนี้ เราให้ tkinter เฝ้าดู widget frame
argument แรก บอก tkinter ว่าให้จับตาดู event แบบไหน
argument ที่สอง บอก tkinter ว่าถ้าพบ event แบบนั้นจะเรียกฟังก์ชันอะไร
ในบรรทัดนี้เราบอก tkinter ให้จับ event ประเภท <Button-1>
หมายถึงให้ดูว่ามีการคลิกซ้ายบนเมาส์หรือไม่ เมื่อพบการคลิกเมาส์ tkinter จะจับตำแหน่งของเมาส์บนหน้าต่าง (ในรูปของ xy coordinate) โดยอัตโนมัติ จากนั้นเราบอกว่าเมื่อใดก็ตามที่เหตุการณ์นี้เกิดขึ้นให้เรียก ฟังก์ชัน callback ที่เรากำหนดไว้ดังนี้
def callback(event):
print("clicked at", event.x, event.y)
ฟังก์ชัน callback โดยปกติจะมีหนึ่ง argument คือ event
ซึ่งเก็บค่าคุณลักษณะของ event ที่เกิดขึ้น ในกรณีนี้ ตัวแปร event
จะเก็บค่าของ xy coordinate ที่เมาส์คลิก
นอกจาก event ประเภท