สวัสดีครับ ในบทความนี้ผมจะพานักอ่านทุกท่านได้รู้จักกับการเขียน GUI ภาษา Python ทำ Typewrite effect animation ง่ายๆ ด้วย tkinter นะครับ
สิ่งที่ต้องมี
- Python version 3 ขึ้นไป
- tkinter (เป็น library ติดเครื่องอยู่แล้ว)
- threading (เป็น library ติดเครื่องอยู่แล้ว)
สำหรับการการเขียน GUI ภาษา Python ทำ Typewrite effect animation ง่ายๆ ด้วย tkinter สิ่งที่เราจะทำนะครับ จะเป็นการทำให้ข้อความของ widget Label ของเรานั้นมีเอฟเฟ็คพิเศษ คือ มันจะค่อยๆพิมพ์แสดงตัวอักษรเข้ามาทีละตัวๆจนถึงตัวสุดท้ายของคำ แล้วกลับไปเริ่มพิมพ์ใหม่ ทำแบบนี้ไปเรื่อยๆไม่รู้จบนะครับ
ตัวอย่างตามในวิดีโอด้านล่างเลยนะครับ
คำอธิบายโค้ด
Note : import tkinter as tk เป็นการนำไลบรารี่ tkinter เข้ามาใช้ และตั้งชื่อเล่นว่า tk ด้วยคำสั่ง as
ในบรรทัดที่ 18,22 เป็นคำสั่งสุดท้ายในเงื่อนไขทั้งสอง คือ สั่งให้ฟังก์ชันนี้เรียกตัวเองไปเรื่อยๆ เป็นการทำงานแบบ recursive นั่นเอง โดยเรียกตัวเองหลังจากรอเวลา 0.2 วินาที หรือ 200 มิลลิวินาที และให้ตัวแปร counter บวกเพิ่มอีก 1 เพื่อพิมพ์ตัวอักษรต่อไป
เรียบร้อยครับทีนี้ลองกดรันดูก็จะได้เอฟเฟ็คสวยๆแล้วครับ
สรุป
การเขียน GUI ภาษา Python ทำ Typewrite effect animation ด้วย tkinter อาจมีข้อจำกัดอยู่บ้าง เมื่อเทียบกับการทำอนิมเชันบนเว็บไซต์ โดยใช้ html css javascript อาจจะง่ายกว่า เนื่องจากไม่ต้องไปจัดการเรื่องเทรด แต่พอมาเป็น Desktop Application แล้วอาจต้องจัดการเรื่องเทรดอยู่บ้าง เพื่อป้องกันอาการค้างของโปรแกรม ที่มีสาเหตุมาจากการที่โปรแกรมของเราทำงานแบบ Sequential หรือโปรแกรมทำงานจากบนลงล่างนั่นเอง ทำให้เราต้องแยกการทำงานออกเป็นเทรด เพื่อให้ส่วนที่เป็นอนิเมชันได้ทำงานควบคู่ไปกับโปรแกรมส่วนอื่นที่รันยังไม่เสร็จได้ ทำให้โปรแกรมไม่ค้าง ซึ่งในผู้อ่านบางท่านที่พึ่งเริ่มต้นศึกษาการเขียน GUI ในภาษา Python ที่มีการจัดการเรื่อง Thread และ State managaement รวมถึงเรื่อง Event ต่างๆ อาจจะมองว่ายากได้ ซึ่งในบทความถัดๆไปผมอาจจะนำเรื่องการจัดการ Event หรือเทคนิคต่างๆมาเขียนเป็นบทความให้อ่านในลำดับถัดไป สำหรับบทความนี้นี้ผมอยากให้นักอ่านทุกท่านทำความเข้าใจเรื่องเทรด (Thread Programming) ให้ดี เพราะจะเป็นประโยชน์ ต่อการเขียนโปรแกรมในอนาคตแน่นอน สุดท้ายนี้ก็ขอขอบคุณนักอ่านทุกท่านที่แวะมาอ่านบทความนี้ เจอกันบทความหน้า สวัสดีครับ
Comments are closed.