การผูก Event (Event Binding) กับ Widget ใน Tkinter ใช้เมธอด widget.bind(sequence, callback) เมื่อต้องการส่งอาร์กิวเมนต์ให้ Callback ใช้ Lambda function
ขั้นตอนการทำงาน
- นำเข้า
tkinter - สร้าง Root Window
- กำหนด Event Handler ที่รับอาร์กิวเมนต์
- สร้าง Widget (Label, Button, Frame)
- ผูก Event ด้วย
bind()ใช้ Lambda ส่งอาร์กิวเมนต์ - รัน
mainloop()
ตัวอย่างโค้ด
from tkinter import *
win = Tk()
win.geometry("750x250")
def event_show(event):
button.config(bg="red", fg="white")
label.config(text="Hello World")
label = Label(win, text="", font=('Helvetica 15 underline'))
label.pack()
frame = Frame(win)
button = Button(frame, text="Click", command=lambda: event_show(button))
button.pack(pady=10)
frame.pack()
# ผูก Enter key เรียก event_show พร้อม event object
win.bind('', lambda event: event_show(event))
win.mainloop()
รูปแบบ Event Sequence พบบ่อย
| Sequence | เหตุการณ์ |
|---|---|
' | คลิกซ้ายเมาส์ |
' | คลิกขวาเมาส์ |
' | ดับเบิลคลิกซ้าย |
' | กด Enter |
' | กดปุ่มพิมพ์ใดๆ |
' | กดปุ่ม 'a' |
' | เลื่อนเมาส์ |
' | เมาส์เข้า Widget |
' | เมาส์ออก Widget |
' | Widget ได้ Focus |
' | Widget สูญเสีย Focus |
Event Object Attributes
def handler(event):
print(event.x, event.y) # ตำแหน่งเมาส์ใน Widget
print(event.x_root, event.y_root) # ตำแหน่งเมาส์ในหน้าจอ
print(event.widget) # Widget ที่เกิด Event
print(event.keysym) # ชื่อปุ่มที่กด
print(event.char) # ตัวอักษรที่กด
print(event.state) # สถานะ Modifier keys (Shift, Ctrl, Alt)
print(event.type) # ประเภท Event (KeyPress, ButtonPress, etc.)
การ Unbind Event
# ยกเลิกการผูกเฉพาะ callback
widget.unbind('', callback_id)
# ยกเลิกทั้งหมดของ sequence
widget.unbind('')
การประยุกต์ใช้
เหมาะสำหรับ: Keyboard shortcuts, Drag & Drop, Hover effects, Real-time validation, Game controls, Custom widget behavior