เปลี่ยนหน้าต่างโปรแกรมธรรมดาให้มีชีวิต! เรียนรู้วิธีการเขียนโค้ด "จัดการเหตุการณ์ (Event Handling)" เพื่อสั่งให้ปุ่มทำงาน พร้อมเทคนิคการดึงข้อมูลที่ผู้ใช้พิมพ์ส่งเข้ามา (Input) และการใช้ Message Box เด้งหน้าต่างแจ้งเตือนสุดเท่ เพื่อยืนยันความถูกต้องของข้อมูลก่อนส่งเข้าสู่ระบบ Big Data
Event Handling & Message Box
ใน EP ที่แล้วเราสร้างแบบฟอร์มที่มีช่องกรอกชื่อและปุ่มกดได้สำเร็จ แต่ถ้าลองกดปุ่มดูจะพบว่า "มันยังไม่เกิดอะไรขึ้นเลย!" นั่นเป็นเพราะเรายังไม่ได้ใส่ "สมอง" หรือสร้างเหตุการณ์ (Event) ให้กับปุ่มนั้นครับ
การทำให้ปุ่มทำงานได้ เราต้องสร้าง ฟังก์ชัน (Function) หรือชุดคำสั่งเตรียมไว้ก่อน จากนั้นค่อยเอาฟังก์ชันนั้นไปผูกติดกับปุ่มด้วยคำสั่ง command ครับ
ตัวอย่างการผูกคำสั่ง:
# 1. สร้างฟังก์ชันชื่อ save_data() เตรียมไว้
def save_data():
print("กำลังบันทึกข้อมูล...")
# 2. เอาฟังก์ชันไปใส่ในปุ่ม (ห้ามใส่วงเล็บต่อท้ายชื่อฟังก์ชันในปุ่มนะครับ!)
btn = tk.Button(text="บันทึก", command=save_data)
เมื่อผู้ใช้พิมพ์ข้อมูลลงในช่อง Entry เราสามารถใช้คำสั่ง .get() เพื่อดูดข้อมูลนั้นออกมาเก็บไว้ในตัวแปร และนำไปประมวลผลต่อ (เช่น ส่งเข้าฐานข้อมูล Big Data) ได้ทันที
user_input = entry_name.get() (แปลว่า: ไปเอาข้อความจากช่องที่ชื่อ entry_name มาเก็บไว้ในตัวแปร user_input)
เพื่อยืนยันว่าเราได้รับข้อมูลแล้ว เราควรมีหน้าต่างป๊อปอัป (Pop-up) เด้งขึ้นมาบอกผู้ใช้งานครับ ใน Tkinter เราต้องดึงเครื่องมือนี้มาเพิ่มโดยพิมพ์ from tkinter import messagebox ไว้ที่บรรทัดบนสุดของโค้ดครับ
messagebox.showinfo("หัวข้อ", "ข้อความ")
ใช้สำหรับแจ้งข้อมูลทั่วไป หรือยืนยันความสำเร็จ
messagebox.showerror("หัวข้อ", "ข้อความ")
ใช้สำหรับแจ้งเตือนเมื่อเกิดข้อผิดพลาด (เช่น ลืมกรอกชื่อ)
มาดูตัวอย่างการนำความรู้จาก EP.2 และ EP.3 มารวมกัน เพื่อสร้างแอปเก็บข้อมูลที่ทำงานได้จริงกันครับ!
import tkinter as tk from tkinter import messagebox # เรียกใช้เครื่องมือแจ้งเตือน # --- ส่วนของฟังก์ชัน (สมองของโปรแกรม) --- def save_data(): # 1. ดูดข้อมูลจากช่อง Entry มาเก็บไว้ในตัวแปร name name = entry_name.get() # 2. ตรวจสอบเงื่อนไขว่าพิมพ์มาหรือเปล่า? if name == "": messagebox.showerror("ผิดพลาด", "กรุณากรอกชื่อก่อนกดบันทึก!") else: messagebox.showinfo("สำเร็จ", f"บันทึกข้อมูลของ {name} เรียบร้อยแล้ว!") # --- ส่วนของการสร้างหน้าจอ (GUI) --- frame = tk.Tk() frame.geometry("300x200") frame.title("โปรแกรมรับข้อมูล") tk.Label(frame, text="ชื่อของคุณคืออะไร?").pack(pady=10) entry_name = tk.Entry(frame) entry_name.pack(pady=5) # ผูกปุ่มเข้ากับฟังก์ชัน save_data ด้วย command tk.Button(frame, text="บันทึก", bg="orange", command=save_data).pack(pady=15) frame.mainloop()
ทดสอบความเข้าใจเรื่องการจัดการเหตุการณ์และการแจ้งเตือน
ข้อที่ 1: การทำให้ปุ่ม (Button) สามารถคลิกแล้วสั่งงานฟังก์ชันที่เราเขียนไว้ได้ จะต้องใช้พารามิเตอร์ใด?
ข้อที่ 2: หากนักเรียนสร้างช่องรับข้อความไว้ชื่อว่า entry_age นักเรียนจะใช้คำสั่งใดเพื่อ "ดึงข้อมูลอายุ" ที่ผู้ใช้พิมพ์เข้ามาไปคำนวณต่อ?
ข้อที่ 3: หากต้องการใช้งานหน้าต่างป๊อปอัปแจ้งเตือน (Message Box) ในโปรแกรม จะต้องนำเข้าเครื่องมือด้วยคำสั่งใดก่อนเสมอ?
ข้อที่ 4: คำสั่ง messagebox.showerror() เหมาะสำหรับนำไปใช้ในสถานการณ์ใดมากที่สุด?
ข้อที่ 5: ในมุมมองของการจัดการข้อมูล (Data Management) การเขียนโปรแกรมให้มีระบบเช็กความผิดพลาดและเด้ง Message Box แจ้งเตือนผู้ใช้ มีข้อดีอย่างไร?
© 2023 Smartyquizkids.com
All Rights Reserved.