李保源
摘要:對wxPython工具箱的主要組件及其使用方法作簡單介紹,并給出了一個用wmPython設計的課件用戶界面。
關鍵詞:wyPython用戶界面CAIScript自由軟件
用wxPvthon結(jié)合wxPython工具箱,進行課件設計,不僅使課件具有了交互性,更使課件具有了堅實的科學計算基礎。特別需要指出的是:使用wxPython這樣的自由軟件,可以免費獲取大量現(xiàn)成的源代碼進行借鑒和利用,這將大大縮短開發(fā)周期;而使用者也無需花錢購買運行環(huán)境需要的軟件(如MS office),課件的運行成本將會極少。
1wxPython工具箱中的部分主要組件
提及的wxPvthon為2.6.1.0,是包含在python的一個集成發(fā)布包Enthought 0.9.2中的,是ansi版,但并不妨礙在界面上顯示中文。其所附的演示程序(demo)位于Python安裝日錄下的Enthought/demo子目錄下,主程序為Main.py,運行時的界面。下面結(jié)合演示程序,對wxPython中的部分主要組件作一簡單介紹。界面的主體是一個窗體(Frame),窗體上方是菜單欄(MenuBar),下方是狀態(tài)欄(StatusBar),中間由兩個分隔窗口(SplitterWin-dow)將窗體主體分為三個子窗口。左邊的子窗口中嵌入一個樹組件(TreeCtrl),由一個根節(jié)點和兩層下拉式子節(jié)點構(gòu)成,上一層用于對演示的例子程序進行組織分類,下一層的每個節(jié)點的名稱(hemText)均對應一個具體的演示例子程序的文件名。樹的結(jié)構(gòu)對應于Main.py中定義的一個名為treeList的列表數(shù)據(jù)結(jié)構(gòu)。如改變treeList的內(nèi)容,就可輕易改變演示內(nèi)容。右邊下面的子窗口中嵌入了一個文本框組件(TextCtrl),用于顯示程序運行時的有關信息。右邊上面的子窗口中嵌入了一個可以組織多頁窗口的組件(Note-book),由圖1可以看出,Notebook上方有三個頁面標簽(tab),點擊不同的標簽將顯示不同的頁面窗口(page),三個頁面窗口分別是:web頁面窗口(HtmlWindow)、源程序面板窗口(Panel)和程序運行窗口(其組件可以是繼承wxPython的Window類的一個子類,如Panel,PlotWindow等),分別用于顯示綜述(OverView)、顯示例子程序的源代碼和運行例子程序,三個頁面窗口中的內(nèi)容均和同一源程序文件有關。
上述討論不難看出,圖1所涉及的一些wxPython中的的組件,如菜單、樹、窗口、多頁窗口、面板等均是編寫課件圖形用戶界面的重要組件。界面亦是一個非常不錯的通用界面。其中的TreeCtrl組件可用于課件大綱內(nèi)容的目錄組織,Notebook組件可用于課件主題內(nèi)容的分頁管理:HtmlWindow頁面窗口可用于課件一般內(nèi)容(采用Html的網(wǎng)頁格式)的顯示:而涉及科學計算結(jié)果的可視化內(nèi)容:如各種二維曲線圖、三維立體圖、動畫等可通過嵌入到Note-book的頁口窗口中顯示出來。TreeCtrl組件上的節(jié)點由_treeList列表變量控制和組織,每個節(jié)點均對應一個文件。這種設計框架使得課件的編寫被分解為對一個個具有固定格式的獨立程序文件的編寫。其結(jié)果是:無論內(nèi)容的更改還是增加、刪減都顯得更為靈活。更改內(nèi)容僅需修改相應的程序文件,對其它文件和主程序無任何影響。增加和刪減課件內(nèi)容那就更為方便,只需修改treeList列表變量的內(nèi)容即可。通過改變treeList列表中條目的次序,更可輕松實現(xiàn)課件內(nèi)容的重新組織。獨立程序文件中的固定格式大致為:
按照上述格式,可以寫出課件的一個個頁面內(nèi)容,然后_通過treeList列表進行組合,就可集成為一個適合特定需要的實際課件。修改圖1所示的界面,寫出適合課件需要的界面并不困難。借助python語言的面向?qū)ο筇攸c,通過對Main.py中的類的繼承,僅需極少代碼,就可寫出適合實際課件的用戶界面。當然,也可直接修改Main.py文件。下面給出具體例子。
2一個具體的課件用戶界面
顯示的是一個涉及物理光學中干涉和衍射現(xiàn)象的課件用戶主界面,它是通過對Main.py中的類的繼承來實現(xiàn)的。主界面程序的框架如下:
用戶界面非常相似。主要區(qū)別只是窗口中顯示的內(nèi)容。程序窗口中的顯示變成了牛頓環(huán)的干涉圖案,相應的代碼存放在名為牛頓環(huán)-PY的文件中,其中的代碼應按照上節(jié)中總結(jié)出的、顯示課件頁面內(nèi)容的固定程序文件格式書寫,以便主界面程序調(diào)用。頁面上使用了wxPython的其它一些組件,用于進一步增強課件的交互性:并用Scipy作為計算工具,使其具有堅實的科學基礎。程序窗口是一個wxPanel的實例,其中除放置了wxStaficBitmap組件用于顯示干涉圖案外,還放置了WX-TextCtd,wxSpinButton,wxSlider,wxButton等組件。通過對組件綁定相關事件,用戶便可輕松設置牛頓環(huán)干涉實驗的相關參數(shù),觀察不同的干涉圖案。
整個課件用Scipy作為計算工具,先根據(jù)干涉和衍射的光強分布公式Ⅲ,采用Scipy的矩陣運算函數(shù),得出公強分布的矩陣數(shù)據(jù):然后根據(jù)用戶選擇的波長值,算出對應顏色的色圖。在獲得光強分布和對應色圖的基礎上,先采用Scipy的繪圖子程序包plt中提供的功能,將其轉(zhuǎn)換為BitMap的位圖數(shù)據(jù),再通過wxPython的位圖組件顯示出來。課件不僅科學,而且具有很好的交互性,用戶可以通過wxPython窗口頁面上的組件來調(diào)節(jié)不同的演示參數(shù),從而觀察到不同的光強分布圖案。
3結(jié)束語
用wxPython設計的圖形用戶界面,其視覺效果非常類似于用Microsoft Visual系列語言設計的程序界面。用來設計課件用戶界面更是具有許多優(yōu)點。它不僅方便好用,而且簡潔漂亮,更重要的是設計出的用戶界面靈活性強、適用性廣,可以適應不同內(nèi)容課件的需要。