ผมมีโค้ด a.py อยู่อันนึง ที่คลิกเข้าไปมันก็รันใน command line
ผมงงตรงที่ว่า ผมเคยเห็นโปรแกรมหลายๆ โปรแกรม คลิกเข้าไปแล้ว
จะเป็นโปรแกรมที่มี button หรือ menu ต่างๆ แต่ไำพธอน
มันจะทำออกมาได้ยังไง เพราะเท่าที่เห็นมันมีแค่ให้เขียนโค้ด
แล้วรันใน command line มันจะรวมโค้ดกับหน้าตามันได้อย่างไร
ผมเขียนในวินโดว์นะครับ
ต้องใช้พวก GUI Toolkit ครับ จะเป็น Library สำหรับสร้าง Interface ขึ้นมาใช้งาน
ถ้าจะดูรายชื่อ GUI Toolkit และ Designer ต่างๆ ดูได้ที่นี่เลยครับ
GuiProgramming - PythonInfo Wiki
ตัวอย่างสำหรับ PyQt4 ดูได้ที่นี่ครับ
First programs in PyQt4 toolkit
เท่าที่เคยได้ยินบ่อยๆ ก็จะเป็นพวก
* PyQt4, Qt4
* WxPython, WxWidget
* PyGtk, Gtk
ส่วนตัวแล้ว Interface ผมชอบ Qt4 นะครับ เพราะ Interface ดูน่าสนใจ แล้วก็ Cross-Platform ด้วย
* Linux
* Mac OS
* Windows
* Windows CE/Mobile
* Symbian, Maemo (Nokia)
แล้วก็ดูน่าจะมีอนาคตกับ Meego ด้วยครับ (Intel + Nokia) (Moblin + Maemo)
พอสมมุติืว่า ผมใช้ qt4 สร้าง interface ขึ้นมา แล้วผมจะรวมเข้ากับโค้ดยังไง
ใช้ PyQt4 ครับ สำหรับเรียกใช้งาน Interface
ผมเองเคยลองกับ C++ นะครับ ตาม Tutorial ใน Qt4 ซึ่ง Qt4 เค้ามี Library สำหรับ C++ มาให้ด้วยอยู่แล้วครับ คิดว่าก็คงเป็น Concept เดียวกัน เพียงแต่ Library จะเป็นของ Python ครับ
ผมเองยังไม่เคยเขียน Code เกี่ยวกับ User Interface บน Desktop แบบจริงๆ จังๆ นะครับ แต่คิดว่ากลักการคงเหมือนการเขียน Web ฝั่ง Client มอง Qt4 designer เป็น Dream weaver, ตัว Qt4 Designer ถ้าจะไม่ผิดก็จะ gen code ออกมาเป็น xml ด้วยส่วนนึง ก็มองเหมือน html, ส่วน Python ก็มองเป็น javascript, PyQt4 ก็มองเป็นพวก Javascript framework ก็ได้ครับ เช่น Jquery, ExtJs, YUI ส่วน Qt4 engine ก็มองเป็น Web Browser สำหรับแสดงผลเอาครับ เช่น Firefox, IE.
ผมเคยลองเล่นแค่เผินๆนะครับ แต่เท่าที่จำได้คือ QtDesigner มันจะเซฟไฟล์ไว้เป็น format นึง แต่จะมี tool ไว้แปลงไฟล์นี้ไปเป็น python code (.py) ซึ่งในนั้นจะบอก layout รวมถึง GUI component ต่างๆไว้
วิธีใช้ก็ต้องสร้าง .py ไฟล์ใหม่ขึ้นมาแล้ว import ส่วนต่างๆจาก .py ที่ได้จากการแปลงใน step ก่อนนี่ล่ะ แล้วก็เขียน event handlers ต่างๆไว้ใน .py ไฟล์ใหม่ จริงๆแล้วจะเขียน handlers ไว้ใน .py ที่แปลงมาก็ได้ แต่เนื่องจากว่าอาจจะมีการเปลี่ยน interface ภายหลัง (ซึ่งจะทำให้ต้องแปลงใหม่) เขียนแยกไฟล์ไว้จึงเหมาะกว่า