Python使用wxPython、py2exe編寫桌面程序
Python是支持可視化編程,即編寫gui程序,你可以用它來編寫自己喜歡的桌面程序。使用wxPython來做界面非常的簡單,只是不能像C 一樣拖動控
Python是支持可視化編程,即編寫gui程序,你可以用它來編寫自己喜歡的桌面程序。使用wxPython來做界面非常的簡單,只是不能像C#一樣拖動控件,需要自行寫代碼布局。在完成編寫之后,由于直接的py文件不能再沒有安裝python的電腦上運行,能否有一個打包成在任意電腦都能運行的工具,網上找找發現了py2exe正好可以完成這個功能。wxPython和py2exe都是開源免費軟件。
wxPython: 下載后雙擊安裝即可,安裝程序會自動安裝到對應python\Scripts下。
py2exe:同樣雙擊即可安裝,注意下載要對應使用的Python版本。
下面分別示例說明wxPython和py2exe的簡單使用。
文件名:wxTest.py:
# -*- coding: cp936 -*- '''MainWindow類完成最簡單的編輯功能,添加一個主菜單,兩個子菜單(about和exit)''' import wx class MainWindow(wx.Frame): '''定義一個窗口類''' def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(300, 300)) self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) self.setupMenuBar() self.Show(True) def setupMenuBar(self): self.CreateStatusBar() menubar = wx.MenuBar() menufile = wx.Menu() mnuabout = menufile.Append(wx.ID_ABOUT, '&About', 'about this shit') mnuexit = menufile.Append(wx.ID_EXIT, 'E&xit', 'end program') menubar.Append(menufile, '&File') #事件綁定 self.Bind(wx.EVT_MENU, self.onAbout, mnuabout) self.Bind(wx.EVT_MENU, self.onExit, mnuexit) self.SetMenuBar(menubar) def onAbout(self, evt): '''點擊about的事件響應''' dlg = wx.MessageDialog(self, 'This app is a simple text editor', 'About my app', wx.OK) dlg.ShowModal() dlg.Destroy() def onExit(self, evt): '''點擊退出''' self.Close(True) app = wx.App(False) frame = MainWindow(None, 'Small Editor') app.MainLoop() #循環監聽事件
編輯好改文件后,使用py2exe將Python腳本編譯成Windows可執行文件,這樣就不需要Python解釋器了。要使用py2exe,首先要編寫一個編譯腳本,然后通過Python運行編譯腳本即可將其他的腳本編譯成可執行文件。以下實例是將要編譯成可執行文件的腳本,文件名:setup.py
import distutils import py2exe distutils.core.setup(windows=['wxTest.py'])
在setup.py中除了導入必需的模塊以外,只有一條語句:
distutils.core.setup(windows=['wxTest.py'])
方括號中就是要編譯的腳本名,前邊的windows 表示將其編譯成GUI程序。如果要編譯命令行界面的可執行文件,只要將windows改為console,如果需要將腳本編譯成Windows服務,則可以使用service選項。
都編輯好之后,將wxTest.py和setup.py放在同一個路徑下,cmd進入該路徑,輸入:
setup.py py2exe
如果在運行時報以下錯誤:
error: MSVCP90.dll: No such file or directory
是因為沒有找到MSVCP90.dll,在windows目錄下搜索MSVCP90.dll這個文件,然后拷到python安裝目錄的DLLs下就可以了。
當打包PyQt項目時,可能會報以下錯誤
ImportError: No module named sip
這時只需要在打包時加上--includes sip就行啦,如:
setup.py py2exe --includes sip
運行結束之后,會在路徑下生成dist和 build兩個目錄。其中dist目錄中就是編譯生成的文件。如果要在其他未安裝Python的機器上運行編譯好的程序,只要將dist目錄復制到其他機器上即可。雙擊運行wxTest.exe,如圖: