Login | thai-learning | Privacy Policy | About Us |

Thai Learning | ทฤษฎี IS ขั้นสูง | เว็บไทย | สารสนเทศวิทยานิพนธ์ | หนังสือรามคำแหงทั้งหมด | เกี่ยวกับผู้จัดทำ | บทกลอน |
วิชาที่เรียน 1/2555
   เมนูหลักวิชาเรียน 1/2555
   การโปรแกรมเว็บสารสนเทศ ฯ
   การโปรแกรมงานภูมิศาสตร์ ฯ
   โปรแกรมสำหรับงานสารสนเทศ
   อินเตอร์เน็ตและการบริการ สารสนเทศบนเว็บ
   บรรยากาศ เทอม 1-2555
โปรแกรมที่ผมพัฒนาครับ
   เมนูหลักโปรแกรมที่ผมพัฒนา
   ถอดรหัสผ่าน M$-Access
   ระบบการเข้าเรียนและให้คะแนน
   การทำงานของ Adder Logic
   ปรับระดับเสียงโวลุ่ม ด้วย CLI
   เกมส์เลื่อนภาพแสนสนุก vb6
บทความที่ผมเขียนครับ
   เมนูบทความ
   ภาษาซีสำหรับผู้เริ่มต้น
   ไมโครคอนโทรเลอร์เบื้องต้น
   ไมโครคอนโทรลเลอร์จำลอง
   การกำเนิดกระแสไฟฟ้าอย่างง่าย
   ควบคุมแรงดัน 0-220 โวลท์
   Graphics LCD ด้วย CCSC
   การออกแบบ PCB ด้วย Orcad
   การออกแบบ PCB ด้วย Protel
   ไพธอนส่งเมล์ด้วย GPRS
   ไพธอนควบคุม LCD ผ่าน LPT
   ควบคุม LPT ด้วย Labview
   อิมเมจโปรเซสซิ่ง ตอน 1/3
   อิมเมจโปรเซสซิ่ง ตอน 2/3
   อิมเมจโปรเซสซิ่ง ตอน 3/3
   ภาษาซีบนลินุกซ์สมองกลฝังตัว
   การใช้งาน MinGW เบื้องต้น
   ภาษาซี ARM-LPC2368
   ออกแบบ FPGA ด้วย Schematic
   ออกแบบ FPGA ด้วยภาษา VHDL
   ออกแบบ PCB เทคนิค Dryfilm
   เขียนโปรแกรม Python GUI
   การติดตั้ง NumPy 1.6.1
   เขียนไพธอนถอดรหัส MDB
   วิชวลเบสิค ควบคุมกล้อง
   สังเคราะห์ภาพกราฟิก pov-ray
   อิมพอร์ท MySQL ด้วย BigDump
   ติดตั้ง postgresql และ phppgadmin บน centos linux
   การใช้งานเธรดด้วยภาษา PHP
   การสังเคราะห์สีให้ไวยากรณ์ภาษา
   การสร้าง Search Engine
   เขียนไพธอน Client/Server
   การสร้างพาทิชั่นที่ใหญ่กว่า 3TB บนลินุกซ์ (Ubuntu)
   การรันสคริปต์ CGI ด้วยภาษาไพธอน
   การใช้งานคำสั่ง DD บน Ubuntu - Linux
   การใช้งาน Raspberry Pi
   การเอ็กซีคิวส์ + การจัดเรียงแอพฯในลินุกซ์
   X11 ด้วย Xming และ Putty
   TITAN5 บน Ubuntu - Linux
   รหัสจังหวัดทั่วโลก + เรดาร์
   การควบคุมเว็บบราวเซอร์ผ่าน SELENIUM ด้วยภาษาไพธอน
โปรแกรมภาษา
   เมนู VB-Classic
   ฟังก์ชั่น Visual Basic
   คำสั่ง Visual Basic
   ตัวแปรภาษาไพธอน (ขั้นสูง)
   โมดูลต่าง ๆ ภายในภาษาไพธอน
ข่าวสารไอที
   กูเกิ้ลเปิดตัว Tablet 7 นิ้ว
   อินเดีย IIT เปิดตัว Tablet
   RaspBerry PI สมองกลฝังตัว
   คอมพิวเตอร์จิ๋ว
บริการสารสนเทศ
   ไทยเว็บ 2012
   เว็บไทย
   ฐานข้อมูล วิทยานิพนธ์
   รวมคำศัพท์ภาษาไทย
   เคยฟังมั้ย - เพลงมาร์ช มมส
   ประวัติศาสตร์ชาติไทย หลวงปู่ฤาษีลิงดำ
   เพลงน้อมใจปล่อยวาง 1
   เพลงน้อมใจปล่อยวาง 2
   เพลงน้อมใจปล่อยวาง 3
เกี่ยวกับเรา
   เกี่ยวกับผู้ก่อตั้ง
   บทกลอนที่ผมแต่งครับ..
   แลกลิงค์กับเรา ที่นี่
   รายละเอียดแม่ข่าย
   ดาต้าเซนเตอร์ (Data Center)
   เงื่อนไขการใช้งาน

  
 

การเขียนภาษาไพธอนด้วยกราฟิกอินเตอร์เฟส Boa Constructor
เขียนโดย อ.จักรกฤษณ์ แสงแก้ว สาขาสารสนเทศศาสตร์ คณะวิทยาการสารสนเทศ มหาวิทยาลัยมหาสารคาม

เมื่อภาษาไพธอนได้กำนิดขึ้น ต่อมาได้มีการพัฒนาระบบกราฟิกอินเตอร์เฟส เพื่อโต้ตอบกับผู้ใช้ด้วยภาพกราฟิก ได้แก่ wxPython เพื่อใช้ในการ สร้างฟอร์มรับข้อมูลจากผู้ใช้ ตลอดจนปุ่มและคอนโทรลต่าง ๆ ในระยะแรกการเขียนกราฟิกอินเตอร์เฟสยังคงทำงานด้วยความยากลำบาก เนื่องจากการสร้างกราฟิกอินเตอร์เฟสต้องใช้การเขียนโปรแกรมขึ้นมาด้วยตนเองทั้งหมด ต่อมาได้มีการพัฒนาระบบกราฟิกอินเตอร์เฟสให้มีความง่ายขึ้น ได้เกิดเป็น Boa-Constructor ซึ่งช่วยให้ผู้พัฒนาโปรแกรมสามารถลากและวางอ็อบเจ็คต่าง ๆ ลงไปบนฟอร์มได้ เรียกว่าใช้แนวคิดแบบ WYSIWYG (What You See Is What You Get) กล่าวคือเห็นฟอร์มที่ออกแบบไว้เป็นอย่างไร นั่นคือลักษณะที่ปรากฎจริง ๆ การพัฒนาที่กล่าวมาทั้งหมด อยู่บนพื้นฐานของภาษาไพธอนทั้งสิ้น นอกจากนั้นยังสามารถออกแบบกราฟิกอินเตอร์เฟสได้ในระบบปฏิบัติการวินโดวส์,ลินุกซ์ และ Mac OS X ด้วย ทำให้การพัฒนาแอพพลิเคชั่นของเราใช้งานได้อย่างกว้างขวาง ไม่จำกัดเพียงการทำงานในระบบปฏิบัติการใด ปฏิบัติการหนึ่งอีกต่อไป

เครื่องมือ
1. โปรแกรม Python ในโครงงานนี้เลือกใช้ไพธอน 2.54
ดาวน์โหลดได้จาก http://sourceforge.net/projects/python/ 2. โปรแกรม wxPython
ดาวน์โหลดได้จาก http://sourceforge.net/projects/wxpython 3. โปรแกรม Boa-Constructor
ดาวน์โหลดได้จาก http://sourceforge.net/projects/boa-constructor 4. โปรแกรม Py2Exe
ดาวน์โหลดได้จาก http://sourceforge.net/projects/py2exe/files/ เลือกให้ตรงเวอร์ชั่นกับภาษาไพธอน ในตัวอย่างนี้เลือก py2exe-0.6.9.win32-py2.5.exe


ขั้นตอนการทำงาน
1. ติดตั้งโปรแกรม Python2.54
2. ติดตั้ง wxPython สำหรับ Python2.5
3. ติดตั้ง Boa-Constructor
4. โปรแกรม Py2Exe

ขั้นที่ 1 ติดตั้งโปรแกรม python-2.5.4.msi
1. ติดตั้งโปรแกรม Python2.54 ให้ท่านเลือกไฟล์ python-2.5.4.msi


เลือกไฟล์ python-2.5.4.msi จะแสดงหน้าต่างวินโดวส์ดังนี้


เลือกติดตั้งสำหรับ install for all users หรือ install just for me ตามต้องการ จากนั้นเลือกปุ่ม Next


เลือกไดเร็คทอรี่สำหรับติดตั้งไพธอน 2.5 ตัวอย่างนี้ตั้งไว้ที่ c:\dev\python25

เลือกติดตั้งส่วนประกอบต่าง ๆ ของไพธอน


รอสักครู่โปรแกรมกำลังถูกคัดลอกไปยังระบบคอมพิวเตอร์ของท่าน


ติดตั้งสมบูรณ์ กดปุ่ม Finish

ขั้นที่ 2 ติดตั้งโปรแกรม wxPython2.8-win32-ansi-2.8.10.1-py25.exe
เลือกไฟล์ wxPython2.8-win32-ansi-2.8.10.1-py25.exe จะปรากฎวินโดวส์ดังนี้

เลือก Next เพื่อติดตั้ง wxPython ลงบนระบบปฏิบัติการของท่าน


ยอมรับเงื่อนไขการใช้งาน จากนั้นเลือก Next


โปรแกรม wxPython จะตรวจสอบเวอร์ชั่นที่ถูกติดตั้งไว้ในระบบอัตโนมัติ กด Next


เลือกคอมโพเนนท์ที่ใช้ในการติดตั้ง จากนั้นเลือก Next


รอสักครู่กำลังคัดลอกโปรแกรมเพื่อติดตั้งสู่ระบบปฏิบัติการของท่าน


ติดตั้งเสร็จสมบูรณ์ เลือก ทุกหัวข้อและกด Finish


โปรแกรม wxPython จะทำการคอมไพล์เพื่อใช้งานร่วมกับ Python2.54

ขั้นที่ 3 boa-constructor-0.6.1.bin.setup.exe
เลือกไฟลื boa-constructor-0.6.1.bin.setup.exe จะปรากฎวินโดวส์ดังนี้

เลือก Run เพื่อติดตั้ง boa-constructor


เลือก Next เพื่อติดตั้ง boa-constructor 0.6.1 ลงบนคอมพิวเตอร์ของท่าน


เลือกไดเร็คทอรี่ที่ต้องการติดตั้ง boa-constructor ลงสู่ระบบของท่าน จากนั้นกด Next


ตั้งชื่อ Shortcuts จากนั้นกดปุ่ม Next


เริ่มต้นติดตั้ง Boa-Constructor


ติดตั้งเสร็จสมบูรณ์ กดปุ่ม Finish

ขั้นที่ 4 ติดตั้งโปรแกรม py2exe
เลือกไฟล์ py2exe-0.6.9.win32-py.25.exe จะปรากฎวินโดวส์ดังต่อไปนี้

เลือก Next เพื่อเริ่มต้นติดตั้ง py2exe


โปรแกรม py2exe ตรวจสอบเวอร์ชั่นของไพธอนที่ถูกติดตั้งไว้ในระบบของท่าน เลือก Next


สิ้นสุดการติดตั้ง py2exe กดปุ่ม Finish


เข้าสู่โปรแกรม Boa-Constructor
เลือก Start->Programs->Boa Constructor -> Boa Constructor ดังภาพต่อไปนี้


ท่านจะพบกับหน้าจอเริ่มต้นของ Boa Constructor ดังภาพต่อไปนี้



เมื่อท่านเข้าสู่โปรแกรม Boa-Constructor จะมีคำแนะนำก่อนใช้งาน ดังภาพต่อไปนี้


การกำหนด Interpreter ให้กับ Boa-Constructor
ท่านต้องกำหนด Interpreter ให้กับ Boa-Constructor เพื่อใช้ในการแปลความหมายของชุดคำสั่งทั้งหมด โดยเลือก Tools->Python Interpreter Chooser ดังภาพต่อไปนี้



เลือกไพธอน 2.5 ตามที่ท่านได้ติดตั้งในระบบปฏิบัติการของท่าน ดังนี้


เริ่มต้นสร้างแอพลิเคชั่นแรก สวัสดีชาวโลก
แอพลิเคชั่นแรกของเราจะมีหน้าตาดังภาพต่อไปนี้

ในแอพลิเคชั่นนี้ประกอบด้วย label, textCtrl และ Button เมื่อผู้ใช้กดที่ปุ่ม Button จะแสดงคำว่า “สวัสดีชาวโลก” ลงใน textCtrl ขอเริ่มขั้นตอนการพัฒนาแอพลิเคชั่นแรก ดังต่อไปนี้

ขั้นที่ 1 เลือก File -> New -> wx.App ดังภาพต่อไปนี้



ขั้นที่ 2 ท่านจะพบในวินโดวส์ Editor จะเพิ่มแท็บ App1 และ Frame1 และสร้างโค๊ด python อัตโนมัติ ดังภาพต่อไปนี้


ขั้นที่ 3 ให้ท่านบันทึกไฟล์โดยเลือกแท็บ *(App1)* เครื่องหมาย * บอกท่านถึงว่า ไฟล์ดังกล่าวยังไม่ได้บันทึก หรือหากมีการแก้ไขโค๊ดบางส่วนแต่ยังไม่ได้มีการบันทึกการแก้ไขดังกล่าว


เลือกแท็ป (app1) และกดปุ่มบันทึก (save) ตั้งชื่อโปรเจ็คแอพลิเคชั่น


ขั้นที่ 4 ให้ท่านเลือกแท็บ *(Frame1)* จากนั้นกดปุ่ม บันทึก ดังภาพต่อไปนี้

เลือกแท็บ (Frame1) และกดปุ่มบันทึก (Save)



ขั้นที่ 5 เป็นการเรียก Frame Designer ขึ้นมาเพื่อให้ท่านสามารถเพิ่มเติมเครื่องมือต่าง ๆ ลงไปบนฟอร์ม ของท่านได้ โดยให้ท่านเลือกแท็บ Frame1 จากนั้นเลือกปุ่ม (Frame Design) ดังภาพต่อไปนี้


ท่านจะพบหน้าต่างเฟรม ซึ่งจะอนุญาตให้วางเครื่องมือต่าง ๆ ลงบนเฟรมของท่านได้ ดังนี้


ขั้นที่ 6 ที่วินโดวส์ Boa Constructor IDE – wxPython GUI Builder นั้นจะประกอบด้วยเครื่องมือต่าง ๆ จำนวนมาก ประกอบด้วยกลุ่มสำคัญดังนี้
- แท็บ New เป็นการสร้างส่วนต่าง ๆ ขึ้นใหม่


New
Module
Package
Setup
wx.App
wx.Frame
wx.Dialog
wx.MiniFrame
wx.MDIParentFrame
wx.MDIChildFrame
wx.PopupWindow
wx.PopupTransientWindow
wx.FramePanel
wx.wizard.Wizard
wx.wizard.PyWizardPage
wx.wizard.PyWizardPageSample
Text
Config
Cpp
HTML
XML
HelpBook
BitMap

- แท็บ Containers/Layout

wx.panel
wx.ScrolledWindow
wx.splitterWindow
wx.sashWindow
wx.sashLayoutWindow
wx.ToolBar
wx.StatusBar
wx.Window
wx.Notebook
wx.Listbook
wx.Choicebook
wx.Treebook
wx.Toolbook
wx.BoxSizer
wx.GridSizer
wx.FlexGridSizer
wx.StaticBoxSizer
wx.GridBagSizer
wx.gizmos.DynamicSashWindow
- แท็บ Basic Controls

wx.StaticText
wx.TextCtrl
wx.Choice
wx.ComboBox
wx.CheckBox
wx.RadioButton
wx.Slider
wx.Gauge
wx.StaticBitmap
wx.ScrollBar
wx.StaticBox
wx.StaticLine
wx.html.htmlWindow
wx.stc.StyledTextCtrl
wx.animate.GIFAnimationCtrl
wx.media.MediaCtrl
wx.richtext.RichTextCtrl
wx.combo.BitmapComboBox
wx.SearchCtrl
wx.calendar.CalendarCtrl
wx.datePickerCtrl

- แท็บ Buttons

wx.Button
wx.BitmapButton
wx.SpinButton
wx.SpinCtrl
wx.lib.buttons.GenButton
wx.lib.buttons.GenBitmapButton
wx.lib.buttons.GenToggleButton
wx.lib.buttons.GenBitmapToggleButton
wx.lib.buttons.GenBitmapTextButton
wx. lib.buttons.GenBitmapToggleTextButton
wx.ContextHelpButton
wx.ToggleButton
wx.ColourPickerCtrl
wx.FontPickerCtrl
wx.DirPickerCtrl
wx.FilePickerCtrl

- แท็บ List Controls


wx.ListBox
wx.CheckListBox
wx.grid.Grid
wx.ListCtrl
wx.ListView
wx.TreeCtrl
wx.RadioBox
wx.GenericDirCtrl
wx.gizmos.EditableListBox
wx.Tree.ListCtrl

- แท็บ Library


wx.lib.statictext.GenStaticText
wx.lib.masked.textctrl.textCtrl
wx.lib.masked.ipaddrctrl.IpAddrCtrl
wx.lib.masked.combobox.ComboBox
wx.lib.masked.numctrl.NumCtrl
wx.lib.masked.timectrl.TimeCtrl
wx.lib.intctrl.IntCtrl
wx.lib.scrolledpanel.ScrolledPanel
wx.lib.hyperlink.HyperLinkCtrl
wx.lib.splitter.MultiSplitterWindow
wx.lib.analogclock.AnalogClock
wx.lib.filebrowsebutton.FileBrowseButton
wx.lib.filebrowsebutton.FileBrowseButtonWithHistory
wx.lib.filebrowsebutton.DirBrowseButton
wx.lib.throbber.Throbber
wx.lib.ticker.Ticker
wx.lib.flatnotebook.FlatNotebook

- แท็บ Utilities (Data)

wx.MenuBar
wx.Menu
wx.ImageList
wx.Timer
wx.StockCursor

ขั้นที่ 7 คลิ๊กแท็บ Buttons ของวินโดวส์ Boa Constructor – Python IDE –wxPython GUI Builder เพิ่มปุ่มลงใน Frame1 ดังภาพต่อไปนี้



ขั้นที่ 8 วางคอนโทรลลงบนฟอร์ม

- เลือกที่ Buttons Tab วาง btn ลงใน Frame1 ตั้งค่า Property Label เป็นคำว่า “ตกลง”
- เลือกที่ Basic Controls วาง wx.StaticText ลงบน Frame1 ตั้งค่า Property Label เป็นคำว่า “กรุณากรอกข้อมูล”

- เลือกที่ Basic Controls วาง wx.TextCtrl Frame1 ให้ลบค่าใน Property value

ผลลัพธ์แสดงได้ดังภาพต่อไปนี้


ขั้นที่ 9 เลือกแท็บ Frame1 และคลิ๊กที่ปุ่ม (Post) เพื่อเข้าสู่โหมดการเขียนโค๊ดโปรแกรม ดังภาพต่อไปนี้


ขั้นที่ 10 ในบรรทัดที่ 2 ให้เขียนโค๊ด # -*- coding: utf-8 -*- ลงไป เป็นการกำหนดให้โค๊ดภายใน Frame1 ใช้งานรหัส utf8 หากท่านต้องการใช้งานโค๊ดรหัสภาษาไทยให้เขียน # -*- coding: cp874 -*- แทน ผู้เขียนแนะนำให้ท่านใช้ utf-8 จะช่วยให้ใช้งานกับ Character Set ภาษาต่าง ๆ ได้ด้วย

ขั้นที่ 10 การกำหนดเหตุการณ์คลิ๊กลงบนปุ่ม ก่อนอื่นให้ท่านคลิ๊กลงไปบนคอนโทรลที่ต้องการสร้างเหตุการณ์ ในตัวอย่างนี้คือปุ่ม Button จากนั้นที่วินโดวส์ Inspector ให้เลือกที่แท็บ Evts (ย่อจาก Events) จากนั้น เลือกเหตุการณ์ wx.EVT_LEFT_UP คือเมื่อปุ่มเมาส์ด้านซ้ายถูกยกขึ้น ให้ทำงาน จากนั้นเลือก ปุ่ม (Post the session) ดังนี้

1. เลือก Frame1
2. เลือก Frame Designer
3. เลือกที่ปุ่ม บน Frame1
4. ที่ Inspector ให้เลือก แท็บ Evts
5. เลือก MouseEvent
6. เลือก wx.EVT_LEFT_UP
7. กดปุ่ม Post the session ที่ Inspector windows 8. เขียนโค๊ดลงใน Button1 ดังนี้

คำสั่ง self.textCtrl1.SetLabel(“สวัสดีชาวโลก”) เป็นการกำหนดให้ textCtrl1 มีค่าคำว่า “สวัสดีชาวโลก”

ขั้นที่ 11 กดบันทึก โดยการเลือกที่แท็บ App1 จากนั้นเลือก Save Modified modules
ขั้นที่ 12 กดปุ่ม Run Application จะปรากฎหน้าจอวินโดวส์ดังนี้ เมื่อท่านคลิ๊กที่ปุ่ม “ตกลง” โปรแกรมจะแสดงคำว่า “สวัสดีชาวโลก” ใน textCtrl1 ดังภาพต่อไปนี้



เริ่มต้นสร้างแอพลิเคชั่นที่ 2 การสร้างโปรแกรมแม่สูตรคูณ
โปรแกรมที่ 2 จะเหมือนกับโปรแกรมแรก แต่เพิ่ม ListBox ขึ้นมา โดยเมื่อผู้ใช้พิมพ์ตัวเลขในช่อง textCtrl1 จากนั้นจะวนลูป 12 ครั้งเพื่อแสดงแม่สูตรคูณที่ผู้ใช้ป้อนเข้ามาลงใน ListBox ดังภาพต่อไปนี้

ขั้นที่ 1 จากโค๊ดโปรแกรมแรก ให้ท่านเพิ่ม wx.ListBox ลงบนฟอร์ม จากนั้นพิมพ์โค๊ดต่อไปนี้ ลงในปุ่ม button1 ดังนี้


อธิบายโค๊ดโปรแกรม เมื่อเหตุการณ์ OnButton1LeftUp() ถูกเรียกขึ้นมาทำงานเมื่อผู้ใช้ปล่อยปุ่มเมาส์ด้านซ้าย ท่านต้องอ่านค่าตัวแปรจาก textCtrl1 ออกมาเก็บไว้ในตัวแปรก่อน โดยใช้คำสั่ง self.textCtrl1.Getlabel() จากนั้น สร้างช่วงตัวเลขจาก 1 ถึง 12 ด้วยคำสั่ง range(1,13) และกำหนดตัวแปร result = “%d x %d = %d”%(int(m), I, int(m)*i) คำสั่ง int(m) เป็นการแปลงตัวแปร m ให้เป็นเลขจำนวนเต็ม จากนั้นทำการเพิ่มค่าตัวแปร result ลงใน ListBox ด้วยคำสั่ง self.listBox1.Append(result) ในบรรทัดสุดท้ายของฟังก์ชั่น OnButton1LeftUp() คือคำสั่ง event.Skip() เพื่อทำการปล่อยฟังก์ชั่นนี้เมื่อทำงานเสร็จสมบูรณ์

การเรียกใช้งานโปรแกรมผ่าน Command Line
โปรแกรมตัวอย่างถูกเก็บไว้ในโฟลเดอร์ c:\boa-program โดยตั้งชื่อแอพลิเคชั่นว่า app1.py ท่านสามารถเรียกใช้งานแอพลิเคชั่นได้ด้วยคำสั่งต่อไปนี้



ผลลัพธ์จากการเรียกใช้งานแอพลิเคชั่น แสดงได้ดังนี้


การแปลงไฟล์ .py เป็น .exe เพื่อทำการ Execute
ไฟล์ .exe เป็นไฟล์ที่สามารถเรียกใช้งานได้เลย เราจะใช้มอดูล py2exe เพื่อทำการแปลงซอร์สโค๊ด .py เป็น .exe ท่านจำเป็นต้องติดตั้งมอดูล Py2Exe ลงบนระบบปฏิบัติการของท่านก่อน ขั้นตอนการแปลงแสดงได้ดังนี้

ขั้นที่ 1 ให้ท่านสร้างไฟล์ setup.py โดยมีรายละเอียดดังนี้
1 from distutils.core importsetup
2 import py2exe
3 setup(console=['app1.py'])

ในบรรทัดที่ 3 ให้ท่านเปลี่ยนจาก app1.py เป็นชื่อแอพลิเคชั่นของท่าน

ขั้นที่ 2 ให้ท่านเรียกใช้คำสั่ง python.exe setup.py py2exe ดังนี้
คำสั่ง \dev\python25\python คือการเรียกใช้โปรแกรม python.exe เนื่องจากผู้เขียนติดตั้ง python ไว้ในไดเร็คทอรี่ c:\dev\python25

ขั้นที่ 3 ผลลัพธ์เมื่อแปลง py2exe แล้วจะเก็บไว้ในไดเร็คทอรี่ dist ดังนี้

ขั้นที่ 4 ท่านสามารถดับเบิ้ลคลิ๊กไฟล์ app1.exe เพื่อทำงานได้เหมือนแอพลิเคชั่นทั่ว ๆ ไป

โครงงาน สร้างโปรแกรมพจนานุกรมไทย-อังกฤษ /อังกฤษ-ไทยด้วยภาษาไพธอน โดยใช้ฐานข้อมูล Lexitron
ขั้นตอนการทำงาน
1. ติดตั้งโปรแกรม MySQL
2. ติดตั้ง MySQL DB-API ดาวน์โหลดจากลิงค์ http://sourceforge.net/projects/mysql-python ไฟล์ MySQL-python-1.2.2.win32-py2.5.exe 3. ฐานข้อมูลคำศัพท์ ผู้เขียนเลือกใช้ Lexitron ซึ่งเป็นคำศัพท์ไทย-อังกฤษ/อังกฤษ-ไทย ดาวน์โหลดได้จากเว็บไซด์ ของเนคเทค (Nectec) ท่านสามารถใช้งานฐานข้อมูลคำศัพท์ของ Lexitron ได้โดยไม่เสียค่าลิขสิทธิ์

ตัวอย่างบางส่วนของไฟล์ ETLEX ประกอบด้วยฐานข้อมูลคำศัพท์ในรูปแบบ XML ดังนี้


ตัวอย่างบางส่วนของไฟล์ TELEX


ขั้นที่ 1 การตรวจสอบว่ามีอิลิเมนต์อะไรบ้างใน พจนานุกรม Lexitron ในรูปเอกสาร XML ใช้โค๊ดต่อไปนี้


บรรทัดที่ 1 เป็นการอ่านไฟล์ telex เป็นไฟล์พจนานุกรมไทยอังกฤษของ Lexitron จาก c:\lexitron มาเก็บไว้ในตัวแปร te

บรรทัดที่ 2 import re เป็นการขอใช้ฟังก์ชั่นของ Regular Expression
บรรทัดที่ 3 ประกาศ elements = [] เพื่อให้ตัวแปร elements เป็นชนิดลีสต์ว่าง
บรรทัดที่ 4 ให้ค้นหารูปแบบที่ขึ้นต้นด้วย < ตามด้วยอักษรอะไรก็ได้ และปิดด้วย > โดยเขียนเป็น Regular Expression ด้วยรูปแบบ “<\w+>” เมื่อ \w+ คืออักขระที่เกิดขึ้นได้ซ้ำ ๆ กันได้ ให้ศึกษาเรื่อง Regular Expression เพิ่มเติม
บรรทัดที่ 5 – 7 เป็นการวนเข้าไปในแท็กที่ตรวจพบทั้งหมด ถ้าแท็กที่กำลังตรวจสอบไม่อยู่ใน elements ให้ทำการเพิ่ม (append) ลงไปในตัวแปร elements
ในขั้นตอนสุดท้ายให้ทำการพิมพ์ elements ทั้งหมดออกมา

ขั้นที่ 2 การสร้างตาราง Thai_English_tb ตามอิลิเมนต์ที่ได้มาในขั้นที่ 1 ดังนี้



ท่านสามารถใช้งาน PhpMyadmin และทำการสร้างตารางด้วยโค๊ดต่อไปนี้ได้เช่นกัน



ขั้นที่ 3 การนำข้อมูลเข้าสู่ MySQL มีขั้นตอนดังนี้

ขั้นที่ 3.1 สร้างฟังก์ชั่นเพื่ออ่านข้อมูลภายใน แท็ก แสดงได้ดังนี้

ในตัวอย่างนี้ตั้งชื่อฟังก์ชั่นว่า GetInnerTag โดยรับอาร์กิวเมนต์ 2 ค่าคือ ชื่อแท็กและข้อมูลที่ส่งเข้าไป ผลลัพท์จะคืนค่าเป็น ข้อมูลภายในแท็กที่ท่านระบุเอาไว้ในอาร์กิวเมนต์ตัวที่ 1 หากไม่มีแท็กในข้อมูลที่ส่งเข้ามาจะคืนค่าเป็น -1

ขั้นที่ 3.2 สร้างฟังก์ชั่น GetTagName แสดงได้ดังนี้
ฟังก์ชั่นนี้ผู้เขียนตั้งชื่อว่า GetTagName() โดยมีอาร์กิวเมนต์ 1 ตัวคือเอกสารที่ส่งเข้าไปให้ฟังก์ชั่น จากนั้นจะคืนค่า ชื่อแท็กทั้งหมดที่ตรวจพบและคืนค่าออกมาเป็นตัวแปรลีสต์ซึ่งเก็บรายชื่อแท็กทั้งหมดในเอกสาร หากไม่พบแท็กจะคืนค่าเป็น -1

ขั้นที่ 3.3 เป็นการสังเคราะห์คำสั่ง SQL เพื่อนำเข้าสู่ฐานข้อมูล MySQL ต่อไป แสดงได้ดังนี้
ฟังก์ชั่นนี้ตั้งชื่อว่า GenLexitronSQL() โดยมี 2 อาร์กิวเมนต์คือ Document และ TableName ตัวแปร TableName เป็นการกำหนดชื่อตารางที่จะนำข้อมูลลงไปใส่ในฐานข้อมูล MySQL ในขณะที่อาร์กิวเมนต์ Document เป็นข้อมูลดิบที่ป้อนสู่ฟังก์ชั่นเพื่อให้ทำการถอดจำนวนแท็ก และค่าข้อมูลในแท็กเหล่านั้น เพื่อจะสังเคราะห์ประโยค “INSERT INTO TABLE” ต่อไป

อธิบายขั้นตอนภายใน GenLexitronSQL()
result = {} เป็นการกำหนดตัวแปร result เป็นชนิด Dictionary
sql = “INSERT INTO “ + TableName + “(%s) VALUES (%s);” เป็นการสังเคราะห์คำสั่ง SQL เพื่อนำข้อมูลเข้าสู่ MYSQL ต่อไป โดยที่ TableName คืออาร์กิวเมนต์ที่ระบุชื่อตารางของฐานข้อมูล ส่วน %s ตัวแรก เป็นการกำหนดชื่อ Fields ภายในตาราง และ %s ตัวที่สองเป็นการกำหนดค่าข้อมูลของ Fields ต่าง ๆ
tags = GetTagName(Document) เป็นการอ่านแท็กทั้งหมดใน Document ออกมาเก็บไว้ใน tags
if “Doc” in tags:
tags.remove(“Doc”) เป็นการตรวจสอบว่าหากมีแท็ก “Doc” ซึ่งเป็นโครงสร้างใน XML ของ Lexitron ที่ไม่มีข้อมูลแต่เป็นส่วนของการแยกคำศัพท์แต่ละคำ หากพบให้ลบทิ้งไป
if len(tags) < 1:
return -1
exit เป็นการตรวจสอบว่า ตัวแปร tags มีรายชื่อแท็กเหลืออยู่หรือไม่ หากใช่เราจะคืนค่า เป็น -1 และจบการทำงานฟังก์ชั่นนี้ทันที
for i in tags:
result.setdefault(I,GetInnerTag(i,Document)) เป็นการวนเข้าไปในแต่ละแท็ก และทำการอ่านข้อมูลและเพิ่มค่าให้ตัวแปร Dictionary ด้วยฟังก์ชั่น setdefault() โดยที่อาร์กิวเมนต์ที่ป้อนให้กับ setdefault() คือ คีย์และข้อมูลที่อ่านได้จาก GetInnterTag

fields = string.join(result.keys(),"','") ในตัวแปร results.keys() เป็นลีสต์ของรายชื่อ Fields ทั้งหมด และเราต้องการเชื่อมเป็นสตริงโดยคั่นด้วย ‘,’ เพื่อเป็นการแยก Fields ในคำสั่ง SQL โดยใช้ฟังก์ชั่น join() ภายในมอดูล string
fields = fields.replace("'","") หลังจากที่ joint ลีสต์เรียบร้อยแล้ว ในแต่ละ fields จะครอบด้วยเครื่องหมาย “ ดังนั้นต้องการลบออก จึงใช้คำสั่ง replace("'","")
values = "r'" + string.join(result.values(),"',r'")+"'" เป็นการรวมค่าใน result ซึ่งเป็นตัวแปรชนิด Dictionary โดยเชื่อมลีสต์เข้าด้วยกันด้วยเครื่องหมาย ‘,r’ เมื่อ r คือการบอกว่าเป็นสตริงแบบ raw คือข้อมูลภายในสตริงเป็นอย่างไรจะไม่เปลี่ยนแปลง เช่น ถ้า เขียน \ จะต้องเขียนว่า \\ แต่ถ้าใช้ r’\’ จะหมายถึง \ หนึ่งตัวที่โดยไพธอนจะเพิ่ม \\ นำหน้าให้อัตโนมัติ ขอให้ศึกษาในหัวข้อการใช้งานสตริงเพิ่มเติม

ขั้นที่ 3.4 เป็นการโหลดไฟล์ telex เข้ามาและตัดเป็นท่อน ๆ ในบรรทัด ที่มีคำว่า “</Doc>” ซึ่งเป็นส่วนที่ขึ้นคำศัพท์ใหม่ในโครงสร้าง XML ของ Lexitron แสดงได้ดังนี้

ผู้เขียนทดสอบนำเข้า te[1] ส่งไปให้ฟังก์ชั่น GenLexitronSQL() โดยกำหนดชื่อตารางให้อาร์กิวเมนต์ที่ 2 ชื่อ “thai_english_tb” ผลลัพธ์จากการสังเคราะห์ SQL แสดงได้ถูกต้องและสามารถนำไปโหลดเข้าสู่โปรแกรม MySQL ได้

ขั้นที่ 3.5 ปฏิบัติการสังเคราะห์ SQL คำศัพท์ สี่หมื่นแปดพันคำ (ไทย-อังกฤษ) ดังนี้

ผู้เขียนเปิดไฟล์ชื่อ te.sql เพื่อเตรียมการเขียน SQL ที่สังเคราะห์เสร็จแล้วเก็บไว้ในไฟล์ดังกล่าว
จากนั้น เปิดไฟล์ telex จาก c:\lexitron\ ขึ้นมาและหั่นข้อมูลแต่ละคำศัพท์บริเวณ “</Doc>” เนื่องจากบรรทัดสุดท้ายของ telex เป็นการเครื่องหมายขึ้นต้นบรรทัดใหม่ จึงใช้คำสั่ง te.pop เพื่อดึงเครื่องหมายขึ้นต้นบรรทัดใหม่ ซึ่งเป็นสมาชิกตัวสุดท้ายใน te ทิ้งไป

ออกคำสั่ง for i in te:
sql = GenLexitronSQL(i,”thai_english_tb”)
if sql != -1:
fp.write(sql + “\n”)
เป็นการวิ่งเข้าไปในตัวแปรลีสต์ te ซึ่งเก็บคำศัพท์แต่ละท่อนเอาไว้และส่งเข้าไปให้ฟังก์ชั่น GenLexitronSQL() ถ้าผลลัพธ์ sql กลับมาไม่เป็น -1 คือไม่มีแท็กอยู่ในนั้น เราจะเขียนคำสั่ง SQL ที่ได้มาลงในไฟล์ ด้วย fp.write(sql + “\n”) เมื่อ “\n” คือเขียนเครื่องหมายขึ้นต้นบรรทัดใหม่

fp.close() เป็นการปิดไฟล์ SQL ที่สังเคราะห์ได้ทั้งหมด

3.6 เปิดไฟล์ c:\lexitron\te.sql และเพิ่มบรรทัดบนสุดของไฟล์ te.sql ด้วยคำว่า use lexitron_db; เป็นการบอก mysql ให้ใช้งานฐานข้อมูล lexitron_db;

จากนั้น เรียกใช้คำสั่ง mysql –u root –p < c:\lexitron\te.sql และป้อนรหัสผ่านฐานข้อมูลของท่าน เมื่อข้อมูลถูกป้อนเข้าสู่ mysql เรียบร้อยแล้วจะแสดง MS-DOS Prompt ดังภาพต่อไปนี้

เครื่องหมาย < เป็นการบอก Mysql.exe ว่าให้ทำงานตามคำสั่งภายในไฟล์ c:\lexitron\te.sql

3.7 เปิดโปรแกรม Boa Constructor และวางคอนโทรลดังภาพต่อไปนี้



ที่ปุ่ม button1 ให้เขียนโค๊ดต่อไปนี้

ฟังก์ชั่น OnButton1LeftUp() เป็นการกดปล่อยปุ่มซ้ายที่ปุ่ม Button1
import MySQLdb เป็นการโหลดมอดูลติดต่อฐานข้อมูล MySQL
cn = MySQLdb.connect(“…..”) เป็นการสร้าง Connection กับ MySQL
rs = cn.cursor() เป็นการสร้าง Cursor เพื่อใช้งานกลุ่มขัอมูลต่อไป เปรียบเหมือน Recordset ใน Microsoft
sql = “SELECT …..” + self.textCtrl1.GetLabel() +”%’;” เป็นการสร้างประโยค SQL เพื่อส่งเข้าไปสืบค้นในฐานข้อมูล โดยข้อมูลที่อ่านมาได้จาก textCtrl1 ด้วยฟังก์ชั่น GetLabel() จากนั้นจะถูกใส่เครื่องหมาย % ไว้หน้าและหลัง เพื่อให้ค้นอักษรอะไรก็ได้ตามด้วยข้อมูลที่จะค้นและด้านหลังเป็นอะไรก็ได้ (% ใน MySQL คืออักษรอะไรก็ได้)
rs.execute(sql) เป็นการทำงานคำสั่ง sql ที่สังเคราะห์ในขั้นตอนที่แล้ว
rows = rs.fetchall() เป็นการ fetch ข้อมูลที่ค้นพบทั้งหมดออกมาเก็บใน rows
กำหนด staticText14 ว่า “Found : “ ตามด้วยจำนวนคำที่พบ
for i in range(2,13):
eval(“self.textCtrl” + str(i) + “.SetLabel(‘’)”) เป็นการวนเข้าไปใน textCtrl ตัวที่ 2 ถึง 12 เพื่อเคลียส์ค่า โดยคำสั่ง eval เป็นการปฏิบัติการคำสั่ง python ที่อยู่ในรูปสตริง สุดท้ายทำการตรวจสอบว่าค่าเป็น None หรือไม่ ถ้าไม่ใช่ให้แสดงค่านั้นใน textCtrl

ผลลัพธ์โปรแกรมพจนานุกรม แสดงได้ดังภาพต่อไปนี้

เมื่อท่านป้อนคำศัพท์ที่ต้องการทราบลงน ช่อง textCtrl1 โปรแกรมจะสังเคราะห์ SQL และไปดึงข้อมูลมาใส่ลงใน textCtrl2-12 ตามลำดับ

การตรวจสอบ method ต่าง ๆ ของคอนโทรล
ในการตรวจสอบ method ต่าง ๆ ของคอนโทรลที่วางอยู่บนฟอร์มท่านสามารถใช้คำสั่ง print dir(self.ชื่อคอนโทรล) หรือท่านอาจจะใช้คำสั่งเขียนรายชื่อ method ลงไปในไฟล์ ด้วยคำสั่ง fp = open(“c:\\mymethod.txt”,”w”).write(str(self.ชื่อคอนโทรล)) ได้

รายละเอียดเกี่ยวกับ method ต่าง ๆ ของคอนโทรลภายใน wxPython ท่านสามารถศึกษาเพิ่มเติมได้ในหนังสือ wxPython หรือดาวน์โหลดเอกสารได้จาก http://sourceforge.net/projects/wxpython

สรุป
ในโครงงานนี้ท่านได้เรียนรู้การออกแบบกราฟิกอินเตอร์เฟสด้วย boa-constructor ซึ่งทำงานอยู่บน wxPython และ wxPython ทำงานอยู่บน python ท่านจะพบว่าการเขียนโปรแกรมแบบกราฟิกอินเตอร์เฟสช่วยให้ผู้ใช้งานแอพลิเคชั่นมีความสะดวกสบาย เนื้อหาในบนนี้เป็นเพียงแนวทางให้ท่านก้าวต่อไป เพื่อสร้างสรรค์แอพลิเคชั่นของท่าน ที่สำคัญ คือ boa-constructor , wxPython และ python สามารถใช้งานได้ทั้งระบบปฏิบัติการ Linux / Mac OS X และ วินโดวส์ ท่านจะสามารถเปิดโลกแห่งการพัมนาซอฟต์แวร์ไปยังระบบต่าง ๆ ได้อย่างรวดเร็วและมีประสิทธิภาพ





All trademarks and trade names are the property of their respective owners and used here for identification purposes only.
Privacy Policy | Terms of service | Report a Policy Violation (0.0044 sec)