繼PyQtCodeGenerator之後,又一個懶人程式,以往在執行python的script使用terminal是理所當然的事情,但是一旦搭配了Qt的GUI介面之後總是希望執行PyQt的程式也可以透過滑鼠的點擊就可以執行,為此我一直找不到解決方案,只好自行使用C語言以圖法煉鋼的模式產生一個Script Loader來完成。
整個程式介面很單純,只有兩個按鈕跟一個LineEdit:
執行完畢後會跳出下面的選擇功能:
操作介面非常簡單,你只需要提供想要產生的script位置以及檔名,按下Generate之後此程式就會產生一個由C語言編譯出來的程式,以PyQtCodeGenerator為例,透過PyQtLoader產生之後的資料夾裡的圖示如下:
往後要執行PyQtCodeGenerator我只要點擊如上圖被選取的執行檔即可。
程式解說
程式部份需要多作說明的是下面這一段:
reply = messageBox.exec_()
if messageBox.clickedButton() == actionRun:
subprocess.call(self.filePath)
exit(0)
if messageBox.clickedButton() == actionOpen:
subprocess.Popen(['nautilus' , os.path.dirname(self.filePath)])
exit(0)
if messageBox.clickedButton() == actionClose:
exit(0)
呼叫外部程式我使用了subprocess,而不是os.system()或os.popen*(),因為在python2.6版之後已經不建議使用上述的兩個modules,取而代之的是subprocess.call()或者是subprocess.Popen(),值得注意的是使用subprocess.Popen()時你要將要傳入的檔名跟參數以list的方式傳入,且之中不可有多餘的空白字元,否則會無法正常執行。
關於subprocess的詳細用法可以參考下面的網頁
http://docs.python.org/library
/subprocess.html
http://www.logilab.org/blogentry/20469
另外在檔案路徑處理方面,os.path模組節省了我們自行處理文字分離的部份,詳細使用資訊參考下面的網頁:
http://docs.python.org/library/os.path.html
nautilus裡不是可以點兩下執行?
ReplyDelete喔還有其實可以用desktop檔來執行喔XD
比如說:
----
[Desktop Entry]
Categories=Application;
Encoding=UTF-8
Name=NAME
Exec=./Program
Icon=ICON
Type=Application
Terminal=false
Comment=COMMENT
----
nautilus底下是可以直接點擊.py的檔案直接使用python來執行,只是會有絕對路徑與相對路徑的問題,導致圖示無法正常顯示,但如果使用run in terminal就一切正常,但是卻又多了terminal這個畫面。而Desktop Entry的部份我仍然無法很順利的使用,我的使用方式大致如下:
ReplyDeleteExec=python ./xxx.py,滑鼠兩下點擊無法呼叫出程式,但是在terminal底下可以正常執行這個desktop entry。