在 python開發APP(一) GUI 裡使用了wxPython來開發GUI介面,但很快便會發現 wxPython 的程式碼十分繁瑣而且缺乏好用的佈局工具,剛好 pythonCard 補足了這方面的一點缺陷。下載後安裝的方法很簡單,一樣是 python setup.py install 這個指令即可,但需要注意的是 pythonCard 是架構在wxPython之上,所以在安裝順序上得先確定已經安裝wxPython後再安裝pythonCard才不會發生錯誤。
安裝後就有方便的佈局工具可以用了,到python目錄下Lib\site-packages\PythonCard\tools\resourceEditor 執行 resourceEditor.py (也可以把這檔案做個捷徑方便使用)就會看到如左圖的畫面,左上角是佈局工作,右下角是佈局元件的屬性編輯工具,這樣的畫面是不是跟很多高級IDE工具很像,比wxPython實在是方便很多,對於開發效率更是提升不少。
除了工具以外,pythonCard也提供了大量方便的範例程式讓使用者方便參考使用,只要到python目錄下Lib\site-packages\PythonCard\samples 目錄下執行 samples.pyw 就可以看到像左邊畫面的工具,除了有原始檔案還可以試著直接執行關看結果。
接下來實做一下簡單例子,做一個讓文字框在點擊按鈕後可以顯示跟文字輸入框一樣的文字,大概拉出像以下的畫面並儲存成 PyCardTest.rsrc.py 即可,順便看看內容如何?
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgTemplate',
'title':'Standard Template with File->Exit menu',
'size':(487, 162),
'style':['resizeable'],
'menubar': {'type':'MenuBar',
'menus': [
{'type':'Menu',
'name':'menuFile',
'label':'&File',
'items': [
{'type':'MenuItem',
'name':'menuFileExit',
'label':'E&xit',
'command':'exit',
},
]
},
]
},
'components': [
{'type':'TextField',
'name':'go',
'position':(10, 51),
'size':(417, -1),
},
{'type':'Button',
'name':'Button1',
'position':(353, 7),
'label':u'\u78ba\u5b9a',
},
{'type':'TextField',
'name':'Name',
'position':(60, 8),
'size':(273, -1),
'text':u'Input your Name',
},
{'type':'StaticText',
'name':'StaticText1',
'position':(10, 10),
'text':u'\u540d\u5b57',
},
] # end components
} # end background
] # end backgrounds
} }
PyCardTest.rsrc.py 程式碼相當簡單,看不看其實都沒啥咪差,但稍微瞭解一下內容架構也不算是壞事。
接下來就是如何應用它了,先建立一個同名擋案 PyCardTest.py 放在同目錄下,這個檔案就是我們要撰寫邏輯控制程式碼的地方,首先要導入GUI,所以會有固定的格式如下顯示。
from PythonCard import model
class MyBackground(model.Background):
def on_initialize(self, event):
pass
if __name__ == '__main__':
app = model.Application(MyBackground)
app.MainLoop()
接下來要幫按鈕加上功能,在上面的程式碼class裡加上一個是件綁定的方法。
def on_Button1_mouseClick(self,event):
self.components.go.text = self.components.Name.text
儲存後試著執行PyCardTest.py就可以看到完整功能的應用程式了。
如果要給別人使用當然得封裝一下,那就使用一下py2exe來編譯,果然按照之前的方法馬上就出錯失敗,問題是出在元件沒有被一起封裝進來。得稍微修改一下py2setup.py內容
from distutils.core import setup
import py2exe
#setup(console=['PyCardTest.py'])
import os
# find pythoncard resources, to add ad 'data_files'
pycard_resources = []
for filename in os.listdir('.'):
if filename.find('.rsrc.') > -1:
pycard_resources += [filename]
# includes for py2exe
includes = []
for comp in ['button', 'image', 'staticbox', 'statictext',
'textarea', 'textfield', 'passwordfield']:
includes += ['PythonCard.components.' + comp]
print 'includes', includes
setup(
windows = [
{
"script": "PyCardTest.py",
}
],
options = {
"py2exe": {
"optimize": 2,
"compressed": 1,
"includes": includes,
}
},
)
如此就可以成功產生exe執行檔,再把PyCardTest.rsrc.py 複製到同目錄就依竊OK了。
沒有留言:
張貼留言