2008-10-16

wxPython -- Python 與 wxWidgets的結合

要用wxPython很簡單,首先要下載這些

1. Python -- 最新的是2.6, 不過我還在用2.5.2
2. wxPython -- 有直接編譯好的二進位檔案,也就是執行後就可以使用了!下載wxPython時,建議下載unicode版本,另外它的documents, demos也建議下載回來,裡面有一個完全用Python寫的程式編輯器,是很棒的範例!而且有一些採用wxPython寫的加強版,特別是有個陽春的RAD…

而接下來這些程式碼都是來自於wxPyWiki, 我只是想要幫自己的學習過程寫些筆記…
import wx
app = wx.PySimpleApp()
frame = wx.Frame(None, wx.ID_ANY, "Hello World")
frame.Show(True)
app.MainLoop()

這是第一個程式,看得出來,先import wx, 然後產生一個wx.Frame的視窗。這裡要特別注意,平常我們會覺得是window,但在wxPython裡,wx.Window代表所有任何可以被視覺看到的東西. 所以要看到一般我們常見所謂的視窗,需要透過wx.Frame(它其實也是自wx.Window所衍生)來產生。當然也可以透過wx.Dialog(wx.Frame的子集合)來產生。
import wx
class MainWindow(wx.Frame):
""" We simply derive a new class of Frame. """
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(200,100))
self.control = wx.TextCtrl(self, 1, style=wx.TE_MULTILINE)
self.Show(True)
app = wx.PySimpleApp()
frame=MainWindow(None, wx.ID_ANY, 'Small editor')
app.MainLoop()

當我們比較範例1與2時,會發現當範例2裡面我們產生了一個class,並在裡面叫用self.show,所以就不再額外地叫用frame.show()。
import wx
ID_ABOUT=101
ID_EXIT=110
class MainWindow(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,wx.ID_ANY, title, size = (200,100))
self.control = wx.TextCtrl(self, 1, style=wx.TE_MULTILINE)
self.CreateStatusBar() # 增加狀態欄
# 設定功能表單
filemenu= wx.Menu()
filemenu.Append(ID_ABOUT, "&About"," Information about this program")
filemenu.AppendSeparator()
filemenu.Append(ID_EXIT,"E&xit"," Terminate the program")
# 建立功能棒
menuBar = wx.MenuBar()
menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar
self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content.
self.Show(True)
app = wx.PySimpleApp()
frame = MainWindow(None, -1, "Sample editor")
app.MainLoop()

接下來的範例三,我們可以看到如何增加功能表單和功能棒,的確頗簡單!

2 則留言:

Unknown 提到...

下載wxPython
下再下來的檔案是gem檔
要怎麼安裝阿

LDS天下 提到...

我下載的是.exe或者.msi
你可能下載錯囉