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 ประเภท แล้วเรายังสามารถจับ event ประเภทอื่นๆได้เช่นการลากเมาส์ การ double click หรือ การพิมพ์บนคีย์บอร์ดดูคำอธิบายเพิ่มเติมและตัวอย่างเกี่ยวกับ events ต่างๆ ดังนี้ http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm