wxPython是Python程式設計語言的一個GUI工具箱。他使得Python程式員能夠輕鬆的建立具有健壯、功能強大的圖形化使用者介面的程式。它是Python語言對流行的wxWidgets跨平台GUI工具庫的綁定。而wxWidgets是用C++語言寫成的。
和Python語言與wxWidgetsGUI工具庫一樣,wxPython是開源軟體。這意味著任何人都可以免費地使用它並且可以查看和修改它的原始碼,或者貢獻補丁,增加功能。
wxPython是跨平台的。這意味著同一個程式可以不經修改地在多種平台上運行。現今支援的平台有:32位微軟Windows作業系統、大多數Unix或類Unix系統、蘋果MacOS X。
下面使用wxpython編寫一個簡單的記事本程式,可以開啟本地檔案,編輯,儲存。
#!/usr/bin/pythonimport wxdef OnOpen(event): """ Load a file into the textField. """ dialog = wx.FileDialog(None,'Notepad',style = wx.OPEN) if dialog.ShowModal() == wx.ID_OK: filename.SetValue(dialog.GetPath()) file = open(dialog.GetPath()) contents.SetValue(file.read()) file.close() dialog.Destroy()def OnSave(event): """ Save text into the orignal file. """ if filename.GetValue() == '': dialog = wx.FileDialog(None,'Notepad',style = wx.SAVE) if dialog.ShowModal() == wx.ID_OK: filename.SetValue(dialog.GetPath()) file = open(dialog.GetPath(), 'w') file.write(contents.GetValue()) file.close() dialog.Destory() else: file = open(filename.GetValue(), 'w') file.write(contents.GetValue()) file.close()app = wx.App()win = wx.Frame(None, title="Simple Editor", size=(600,400))bkg = wx.Panel(win)# Define a 'load' button and its label, bind to an button event with a function 'load'loadButton = wx.Button(bkg, label='Open')loadButton.Bind(wx.EVT_BUTTON, OnOpen)# Define a 'save' button and its label, bind to an button event with a function 'save'saveButton = wx.Button(bkg, label='Save')saveButton.Bind(wx.EVT_BUTTON, OnSave)# Define a textBox for filename.filename = wx.TextCtrl(bkg)# Define a textBox for file contents.contents = wx.TextCtrl(bkg, style=wx.TE_MULTILINE | wx.HSCROLL)# Use sizer to set relative position of the components.# Horizontal layouthbox = wx.BoxSizer()hbox.Add(filename, proportion=1, flag=wx.EXPAND)hbox.Add(loadButton, proportion=0, flag=wx.LEFT, border=5)hbox.Add(saveButton, proportion=0, flag=wx.LEFT, border=5)# Vertical layoutvbox = wx.BoxSizer(wx.VERTICAL)vbox.Add(hbox, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)vbox.Add(contents, proportion=1, flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border=5)bkg.SetSizer(vbox)win.Show()app.MainLoop()
程式運行測試如下:
這個例子是《Python基礎教程》中的一個例子,並做了一些修改。雖然完成了基本的記事本功能,但是介面略顯簡單,而且代碼也沒有很好地遵循物件導向編程原則。