Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การผูกฟังก์ชันพร้อมอาร์กิวเมนต์กับ Widget ใน Tkinter (Binding)

การผูก Event (Event Binding) กับ Widget ใน Tkinter ใช้เมธอด widget.bind(sequence, callback) เมื่อต้องการส่งอาร์กิวเมนต์ให้ Callback ใช้ Lambda function

ขั้นตอนการทำงาน

  1. นำเข้า tkinter
  2. สร้าง Root Window
  3. กำหนด Event Handler ที่รับอาร์กิวเมนต์
  4. สร้าง Widget (Label, Button, Frame)
  5. ผูก Event ด้วย bind() ใช้ Lambda ส่งอาร์กิวเมนต์
  6. รัน 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