บทที่ 6: สร้างโปรแกรม GUI ด้วย Tkinter
1. GUI คืออะไร และทำไมต้องใช้ Tkinter
โปรแกรมส่วนใหญ่ที่เราใช้ในชีวิตจริง เช่น เว็บเบราว์เซอร์, โปรแกรมวาดรูป, หรือเกม ล้วนมีหน้าตาสวยงาม มีปุ่ม มีช่องให้กรอกข้อความ เราเรียกหน้าตาแบบนี้ว่า GUI (Graphical User Interface)
Tkinter คือไลบรารีมาตรฐานของ Python ที่ช่วยให้เราสามารถสร้างโปรแกรมที่มี "หน้าต่างโปรแกรม" ได้ง่ายๆ เหมือนกับการต่อเลโก้เลยครับ!
โครงสร้างพื้นฐานของโปรแกรม Tkinter
import tkinter as tk
# สร้างหน้าต่างหลัก
window = tk.Tk()
window.title("โปรแกรมแรกของฉัน")
window.geometry("400x300")
# ... ส่วนของการเพิ่มวิดเจ็ตจะอยู่ตรงนี้ ...
# เริ่มการทำงานของหน้าต่าง (ต้องอยู่ท้ายสุดเสมอ)
window.mainloop()
🚀 วิธีนำโค้ดไปรันบนคอมพิวเตอร์ของคุณ
- ติดตั้ง Python: ถ้ายังไม่มี ให้ดาวน์โหลดจาก python.org (อย่าลืมติ๊กช่อง "Add Python to PATH")
- เลือกโปรแกรมเขียนโค้ด: แนะนำ Thonny (สำหรับมือใหม่) หรือ VS Code (สำหรับมืออาชีพ)
- สร้างไฟล์: คัดลอกโค้ดไปวางในไฟล์ใหม่ แล้วบันทึกเป็นชื่อที่ลงท้ายด้วย
.py
เช่นmy_app.py
- กด Run: ในโปรแกรมเขียนโค้ดส่วนใหญ่ จะมีปุ่ม "Run" (▶) ให้กดเพื่อสั่งให้โปรแกรมทำงาน
2. สร้างหน้าต่างและเพิ่มวิดเจ็ต (Widgets)
"วิดเจ็ต" (Widget) คือชิ้นส่วนต่างๆ ที่เราจะนำมาวางบนหน้าต่างโปรแกรม มาดูวิดเจ็ตพื้นฐาน 3 อย่างที่ใช้บ่อยที่สุดกันครับ
1. Label: ป้ายข้อความ
label_title = tk.Label(window, text="ยินดีต้อนรับ")
2. Entry: ช่องกรอกข้อความ
entry_name = tk.Entry(window)
3. Button: ปุ่มกด
button_submit = tk.Button(window, text="กดเลย!")
การจัดวางวิดเจ็ตด้วย .pack()
หลังจากสร้างวิดเจ็ตแล้ว เราต้องบอก Tkinter ว่าจะให้มันไปแสดงผลตรงไหน วิธีที่ง่ายที่สุดคือใช้ .pack()
ซึ่งจะนำวิดเจ็ตมาเรียงต่อกันจากบนลงล่าง
import tkinter as tk
# สร้างหน้าต่างหลัก
window = tk.Tk()
window.title("Simple Form")
window.geometry("400x300")
# สร้างวิดเจ็ตต่างๆ
label_title = tk.Label(window, text="กรุณาใส่ชื่อของคุณ")
entry_name = tk.Entry(window)
button_submit = tk.Button(window, text="ยืนยัน")
# จัดวางวิดเจ็ตลงบนหน้าต่าง
label_title.pack(pady=5)
entry_name.pack(pady=5)
button_submit.pack(pady=10)
# เริ่มการทำงานของโปรแกรม
window.mainloop()
3. ทำให้โปรแกรมโต้ตอบได้
ตอนนี้เรามีหน้าตาโปรแกรมแล้ว แต่ปุ่มยังกดแล้วไม่เกิดอะไรขึ้น เราจะมาทำให้มัน "มีชีวิต" โดยการเชื่อมโยงการกดปุ่มเข้ากับฟังก์ชันของ Python
import tkinter as tk
def show_greeting():
user_name = entry_name.get() # รับค่าจากช่องกรอก
result_label.config(text=f"สวัสดี, {user_name}!") # เปลี่ยนข้อความ
# สร้างหน้าต่างหลัก
window = tk.Tk()
window.title("Greeter App")
window.geometry("400x300")
# ...สร้างวิดเจ็ต...
prompt_label = tk.Label(window, text="ป้อนชื่อของคุณ:")
entry_name = tk.Entry(window)
submit_button = tk.Button(window, text="ทักทาย", command=show_greeting) # เชื่อมปุ่มกับฟังก์ชัน
result_label = tk.Label(window, text="", font=('Arial', 14))
# ...จัดวางวิดเจ็ต...
prompt_label.pack(pady=5)
entry_name.pack(pady=5)
submit_button.pack(pady=10)
result_label.pack(pady=10)
# เริ่มการทำงานของโปรแกรม
window.mainloop()
4. ตัวอย่างโปรแกรมคำนวณ BMI
เรามาประยุกต์ใช้ความรู้ทั้งหมดสร้าง "โปรแกรมคำนวณดัชนีมวลกาย (BMI)" ซึ่งจะรับค่าน้ำหนักและส่วนสูงมาคำนวณและแสดงผล
import tkinter as tk
import tkinter.messagebox
def calculate_bmi():
try:
weight = float(weight_entry.get())
height = float(height_entry.get()) / 100
bmi = weight / (height * height)
result_text = f"ค่า BMI ของคุณคือ: {bmi:.2f}\n"
if bmi < 18.5:
result_text += "น้ำหนักน้อยกว่าเกณฑ์"
elif 18.5 <= bmi < 23:
result_text += "น้ำหนักปกติ"
else:
result_text += "น้ำหนักเกินเกณฑ์"
result_label.config(text=result_text)
except ValueError:
tkinter.messagebox.showerror("ผิดพลาด", "กรุณากรอกข้อมูลเป็นตัวเลข")
# --- ส่วนหลักของโปรแกรม ---
window = tk.Tk()
window.title("BMI Calculator")
window.geometry("800x600")
# สร้าง Widgets (ส่วนประกอบต่างๆ)
prompt_label = tk.Label(window, text="Weight (kg):")
weight_entry = tk.Entry(window)
height_label = tk.Label(window, text="Height (cm):")
height_entry = tk.Entry(window)
submit_button = tk.Button(window, text="Calculate BMI", command=calculate_bmi)
result_label = tk.Label(window, text="", font=('Arial', 12))
# จัดวาง Widgets ลงบนหน้าต่าง
prompt_label.pack(pady=5)
weight_entry.pack(pady=5)
height_label.pack(pady=5)
height_entry.pack(pady=5)
submit_button.pack(pady=10)
result_label.pack(pady=10)
window.mainloop()
5. โจทย์ท้าทายความคิด
ถึงเวลาที่คุณจะได้ลงมือสร้างโปรแกรม GUI ของตัวเองแล้ว! ลองทำโจทย์ต่อไปนี้บนคอมพิวเตอร์ของคุณ
โจทย์ท้าทาย #1: โปรแกรมแปลงอุณหภูมิ
สร้างโปรแกรมที่รับค่าอุณหภูมิเป็น "องศาเซลเซียส" แล้วมีปุ่มให้กดเพื่อแปลงเป็น "องศาฟาเรนไฮต์" และแสดงผลลัพธ์
โจทย์ท้าทาย #2: เครื่องคิดเลขอย่างง่าย
สร้างโปรแกรมเครื่องคิดเลขที่รับตัวเลข 2 จำนวน และมีปุ่ม 4 ปุ่ม: บวก (+), ลบ (-), คูณ (*), หาร (/) เมื่อกดปุ่มใดๆ ให้โปรแกรมทำการคำนวณและแสดงผลลัพธ์