Python使用wxPython、py2exe編寫桌面程式

pythontab發表於2014-04-16

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,如圖:

Python使用wxPython、py2exe編寫桌面程式

相關文章