PyQt Script Loader

Source: PyQtLoader.zip
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

2 comments:

  1. nautilus裡不是可以點兩下執行?

    喔還有其實可以用desktop檔來執行喔XD

    比如說:
    ----
    [Desktop Entry]
    Categories=Application;
    Encoding=UTF-8
    Name=NAME
    Exec=./Program
    Icon=ICON
    Type=Application
    Terminal=false
    Comment=COMMENT
    ----

    ReplyDelete
  2. nautilus底下是可以直接點擊.py的檔案直接使用python來執行,只是會有絕對路徑與相對路徑的問題,導致圖示無法正常顯示,但如果使用run in terminal就一切正常,但是卻又多了terminal這個畫面。而Desktop Entry的部份我仍然無法很順利的使用,我的使用方式大致如下:
    Exec=python ./xxx.py,滑鼠兩下點擊無法呼叫出程式,但是在terminal底下可以正常執行這個desktop entry。

    ReplyDelete

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas