python開發APP(二)用pythonCard增加開發效率

python開發APP(一) GUI 裡使用了wxPython來開發GUI介面,但很快便會發現 wxPython 的程式碼十分繁瑣而且缺乏好用的佈局工具,剛好 pythonCard 補足了這方面的一點缺陷。下載後安裝的方法很簡單,一樣是 python setup.py install 這個指令即可,但需要注意的是 pythonCard 是架構在wxPython之上,所以在安裝順序上得先確定已經安裝wxPython後再安裝pythonCard才不會發生錯誤。

pythonCard01.JPG
pythonCard01.JPG

安裝後就有方便的佈局工具可以用了,到python目錄下Lib\site-packages\PythonCard\tools\resourceEditor 執行 resourceEditor.py (也可以把這檔案做個捷徑方便使用)就會看到如左圖的畫面,左上角是佈局工作,右下角是佈局元件的屬性編輯工具,這樣的畫面是不是跟很多高級IDE工具很像,比wxPython實在是方便很多,對於開發效率更是提升不少。

 

pythonCard02.JPG
pythonCard02.JPG

除了工具以外,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
} }

pythonCard03.JPG
pythonCard03.JPG

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了。


[+/-] 繼續閱讀...

Ruby on Rails 開始在 Win7

正規的教學裡摸索Ruby實在有點累,甚至難以一窺全貌,Rails其實有點像是Django一樣的MVC框架,所以兩者也有其相似之處(使用上的邏輯思考)。看了很多如何開始的文章,對於Ruby的安裝上實在不是很適合我(喜歡免安裝、帶著走),所以決定從InstantRails下手,首先到官網去下載InstantRails,這樣就可以開始對Ruby開始動手動腳了。

這裡下載InstantRails-2.0-win.zip這個檔案來解壓縮(隨便你喜歡放在哪),從目錄架構來看,它是利用了Apache+PHP+MySQL的基礎,所以你可以執行InstantRails.exe 後看到Apache和MySQL便被啟動,如果點擊最上方左邊按鈕就可以進入Ruby的管理介面,如下圖。

ruby01.JPG
ruby01.JPG

既然使用的是AMP架構,也就是說你也可以單純把它當作一個Web Server來使用,在瀏覽器輸入http://127.0.0.1/ 就會看到網頁顯示出來,而這個網頁是放在www的子目錄下。

Ruby程式是放在ruby子目錄下,而rails_apps這個子目錄就是將來我們要開發的專案存放區,當你進入rails_apps子目錄後會看到底下子目錄名稱剛好跟左圖 Rails Applications一樣。

可以點擊Create New RailsApp…按鈕打開DOS視窗,輸入指令 rails <專案名稱>,再回到管理視窗點擊Refresh List按鈕就可以看到剛才建立的專案名稱,勾選起來後再點擊Start with Mongrel按鈕開始執行剛才的專案。用瀏覽器開啟 http://127.0.0.1:3000/ 後就會發現專案網頁啟動了。

ruby02.JPG
ruby02.JPG

而其中如果要改變port的設定就是到 Configure Startup Mode… 按鈕裡面去更改設定。

如果要手動來啟動專案則到剛才的DOS視窗進入專案名稱子目錄下輸入 ruby script/server 便可以啟動,啟動後跟Pyton一樣可以隨時修改程式碼卻不必再重新啟動而直接套用。

注意:啟動專案跟Apache是沒關係的,就算把Apache停止掉也不影響。

到此為止一個專案的基本架構已經完成,在專案目錄下可以看到一個 app 子目錄,底下有四個子目錄controllers、helpers、models、views就是MVC架構的分類,跟Django十分類似。

繼續為我們的專案添加功能,下指令 ruby script\generate controller MyTest01 就會像下圖一樣,幫你建立一些功能檔案。

ruby03.JPG
ruby03.JPG

 

 

到 app\views\my_test01 目錄下建立 index.html.erb 檔案,內容如下:

 

 

<html>
 <head>
   <title>Hello World 我的第一個頁面</title>
  </head>
<body>
  <h1>Hello World 我的第一個頁面</h1>
</body>
</html>

基本上這算是一個輸出網頁,但Ruby其實還不知道該如何輸出它,接下來到剛才產生的 app\controllers\my_test01_controller.rb 檔案做編輯修改:


class AppController < ApplicationController
def index

end
end

這裡 def index 定義了index的細部功能,然後套用views下的視圖,這樣在瀏覽器下輸入 http://127.0.0.1:3000/my_test01/indexhttp://127.0.0.1:3000/my_test01/ 都可以看到"Hello World 我的第一個頁面" 這一段文字了。


有了以上Ruby運行環境的基礎概念,接下來就可以開始測試學習更深入的語法了。

[+/-] 繼續閱讀...

Tomcat 在Win7下使用

首先得要有tomcat,到tomcat官網下載最新版,這裡下載的是tomcat 7 的64-bit Windows zip (pgp, md5),因為我的環境是Win7 64bit,JAVA 64bit,所以當然使用64bit tomcat的ZIP(免安裝)。

把壓縮檔解壓縮得到一個apache-tomcat-7.0.21目錄,暫時隨便你放在哪都行,免安裝就是要有強大的可攜性(除非必要不使用絕對路徑),再到目錄下的bin子目錄執行startup.bat,如果無法順利執行或告訴你找不到JAVA_HOME那就編輯 startup.bat 裡加上 set "JAVA_HOME=C:\Program Files\Java\jre6" 這一句指定JAVA的所在目錄(這就是不得已的絕對路徑),再一次執行 startup.bat 就會看到執行畫面。

tomcat_run.JPG
tomcat_run.JPG

Tomcat 目錄架構

  • bin          Tomcat程式相關指令
  • conf         Tomcat設定檔
  • lib           Tomcat  jar函式庫
  • logs         日誌檔
  • temp        存放暫存檔
  • webapps   網頁程式存放目錄
  • work         存放編譯好的Servlet

 

打開瀏覽器 http://127.0.0.1:8080 就可以看到網頁顯示,而顯示的內容來自 webapps\ROOT ,如果要看他自帶的的範例則在網址後加上 examples 就會看到 webapps\examples 的內容。

重點是要在網頁上管理tomcat就要輸入 http://127.0.0.1:8080/manager 結果是要你輸入帳號密碼,但不管輸入啥咪都沒用也沒任何提示,此時就要到 conf 子目錄下去編輯 tomcat-users.xml 擋案,在 <tomcat-users> 節點裡加上以下設定:

  <role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status"/>

重新啟動tomcat後再一次進入管理介面,使用admin帳號就可以看到一切了。


tomcat_manager.jpg
tomcat_manager.jpg

[+/-] 繼續閱讀...