รายการ

python กับ GUI

สำหรับการเขียน python แม้ว่าตัวภาษาจะดูเรียบง่าย แต่สำหรับการเขียน python script กับ GUI แล้วล่ะก็เป็นของแสลงสำหรับหลาย ๆ คน
เพราะถึงแม้ว่าจะมี GUI Toolkit ที่รองรับมากมาย หากลองเข้าไปดูใน http://wiki.python.org/moin/GuiProgramming ก็จะมี GUI หลาย ๆ ตัว
ที่เรารวบรวมไว้ ตัวผมเองก็ไม่มีโอกาสได้ลองใช้งานทั้งหมด เพราะแม้ว่าหลายคนจะเขียน python พื้นฐานได้ แต่การนำไปใช้งานร่วมกับ GUI ก็ต้องทำการ
อ่านเอกสารของเขานั้นอย่างละเอียด และรูปแบบคำสั่งการเรียกใช้งาน เช่น event , form ก็จะต่างกันออกไป เช่น คนที่เขียน pygtk และ ปรับไปใช้ wxpython หรือ pyQt ก็ต้องมานั่งอ่านเอกสารกันตาเปียก แต่สำหรับบางคนก็ไม่มีปัญหาอย่างว่ามานะครับ

เรามาลองดูกันว่า GUI tookit หรือ GUI framework สำหรับ python (จริง ๆ แล้วเขาก็ทำรองรับกับภาษาอื่น ๆ ด้วยนะ) มีอะไรกันบ้าง

  • PyGtk base on Gtk Bindings for pango, atk, gtk and libglade  สำหรับสาวก gnome ส่วนตัวแล้วผมชอบ GTK มากกว่า ถึงแม้มันจะยากกว่า GUI ตัวอื่นก็ตามที หรือแม้ว่าพอนำ code ไป run บน window แล้วมันจะน่าเกลียดน่าชังขนาดไหน (ถ้านึกไม่ออกก็ลองดู GUI ของ GIMP หรือ Inkscape ที่ RUN บน Window) เหตุผลคือ มันสามารถ combine กับ GTK ได้เกือบร้อยเปอร์เซ็นต์ การเรียกใช้งาน Library มีความรวดเร็ว เสถียรกว่า ไม่ค่อยเจอกับ Bug และมี Document ที่อ่านง่าย เข้าใจง่าย (หรือเปล่า?) มีCommunity ที่ให้คำตอบของปัญหาเยอะพอสมควร (ไม่ได้ค่าโฆษณานะครับ) มันเหมาะกับงานที่ต้องการความเสถียรภาพสักหน่อย แต่ข้อเสียคือ อย่างว่ามาคือยาก และทำcross platform แล้วอาจจะไม่ค่อยถูกใจกับหลายคน (ลองอ่านตัวอย่างเอกสารที่ผมทำขึ้นมาครับ เอกสารเกี่ยวกับ GTK)
  • PyQt  base on Qt Python bindings for the Qt application development framework เป็น cross platform เช่นกัน มีเครื่องมือสำหรับเขียนโปรแกรมเรียกว่า designer ที่ใกล้เคียงกับ VB มากที่สุด (ในความเห็นผมนะ) แต่มันก็คงเทียบเท่าไม่ได้ เพราะโครงสร้างมันต่างกัน สำหรับคนที่คุ้นเคยกับการเขียนโปรแกรมบน window แล้วอยากลองมาเขียน python บน Linux PyQt น่าจะเป็นทางออกให้ และการนำ code มา RUN บน window ก็กลมเกลือนกับ OS ได้เป็นอย่างดี รับรองดูไม่ออกมาเขียนด้วย Qt Library
  • Jythonbase on Java เป็นการ implement JAVA กับ python เข้าด้วยกัน (ติดค้างไว้ก่อน ยังไม่มีเวลาทดลอง)
  • IronPython base on .NET/Mono  เป็นการ implement  MS.net กับ python เข้าด้วยกัน เป็นอย่างไรก็ไม่เคยลอง เพราะไม่ได้เขียน MS.net
  • TkInter base on Tk Python’s “standard” GUI library เป็น toolkit ที่ได้รับความนิยมมากตัวหนึ่ง สามารถใช้งานได้หลาย platform ตัว Tk จริง ๆ แล้วผมก็ชอบอย่างหนึ่งเพราะมีเอกสารและ widget ให้ใช้งานมากมาย และ สามารถเข้ากับ window ได้ดี แต่พอมา run บน Linux ก็จะได้อารมณ์ GUI แบบย้อนยุคสักหน่อย
  • WxPython base on WxWidgets รองรับทั้ง Windows/Unix/Linux/Mac เหมาะมากสำหรับคนที่ต้องการเขียน python ครั้งเดียวแล้ว run ได้หลาย OS ตัวนี้ ส่วนตัวแล้วผมว่าเป็นมิตรกับทุก ๆ OS มากที่สุด ถ้าเปรียบเทียบก็เหมือนกับ กิ้งก่า ไปอยู่ที่ไหน GUI ก็กลมกลืนไปกับเขาได้หมดดูแล้วก็แยกไม่ออกว่าใช้ Tookit ตัวไหนทำ WxWidget เป็น toolkit ที่มีความสามารถตัวหนึ่ง ซึ่งได้รับความนิยมมากพอสมควร มี ตัวอย่าง demo code ที่มากมายและสวยงาม ตัว widget library ก็ต้องการพื้นที่ไม่มาก จุดเด่นคือ ความง่ายใน การจัดเรียง widget บน form และ ลูกเล่นมากมาย เหมาะสำหรับผู้เริ่มต้นครับ
  • Kivy ตัวนี้รองรับมากมายหลาย platform เช่นกัน เป็น Toolkit ที่ออกแบบมาสำหรับ multitouch  มี widget ที่รองรับพอสมควร ที่สำคัญสามารถใช้งานบน android ได้ด้วย สำหรับคนที่อยากเขียน python บน android ก็ลองดูได้ (ตัวผมเองยังไม่ได้ลองครับ)
  • Scripting Layer for Android (SL4A)  เป็น python interpreter สำหรับ มือถือตระกูล Android คือ ต้องลงโปรแกรมบนมือถือก่อน จากนั้นก็เขียน python script บนและแก้ไขได้ทันทีเลย รองรับการเข้าถึงข้อมูลบนโทรศัพท์ได้มากอยู่ครับ ส่วนตัวผมทดสอบแล้วก็สามารถใช้งานได้ แต่มันไม่ค่อยเหมาะกับการนำ code ไปให้ใช้งาน เหมือนกับพวก file .apk เพราะต้องลงเจ้า SL4A ก่อนนี่แหละ ซึ่งก็ต้องรอดูอนาคต python บน Android ต่อไปว่ามันจะ combind เข้ากับระบบได้ดีขนาดไหน น่าติดตามครับ

การเลือกใช้งาน GUI นั้น ๆ ขึ้นอยู่กับรูปแบบของงานแต่ละงาน ความถนัดของโปรแกรมเมอร์ และความชอบของแต่ละคน และระบบ OS ที่จะรองรับเป็นสำคัญ ในส่วนที่แนะนำก็เป็น GUI ที่เป็น Opensource (เกือบทั้งหมด) ซึ่งมีความสามารถ ข้อดี ข้อเด่นแตกต่างกันไป ที่สำคัญ แม้ GUI จะสวยงามมากแค่ไหน หากแต่ใช้ทรัพยากรของระบบมากก็ไม่ดีในระยะยาว ในโลกของ opensource แล้วส่วนตัวผมอยากให้ลองพยายามเลือกใช้ version ที่ไม่เก่าและไม่ใหม่จนเกินไป เพราะหากเป็น version ใหม่มาก ๆ อาจจะดูดี และก็ต้องผจญกับ Bug ที่ติดสอยห้อยตามมา และการ support ทาง web community อาจจะมีไม่มาก ณ ขณะนั้น งานเราอาจจะเสียหายและเสียเวลาไปโดยเปล่าประโยชน์ก็ได้ ก็ต้องเลือกดูให้ดี

Leave a Reply