2014-02-17 107 views
3

我想整理我的PyQt的項目,我試圖把用戶界面中的子文件夾,並將其導入這樣的:PyQt的項目組織

import sys 
sys.path.append('UI/gui_sensors') 
from gui_sensors_extended import Ui_SensorsWindow_Extended 

但它給我的錯誤,因爲它無法找到* Ui_SensorsWindow *,在* Ui_SensorsWindow_Extended *

繼承的用戶級別所以,你有什麼建議來組織我的項目?我怎樣才能在代碼中處理它?

+0

從根開始在'sys.path'中放置完整路徑 – qurban

回答

9

有構建一個Python項目時要記住的一個關鍵的事情:的當前目錄運行腳本會自動添加到sys.path的開頭。

所以,如果你把你的main.py腳本你的包在一個頂層容器目錄外,這將保證包裝的產品進口會一直工作,無論身在何處的腳本是從執行。爲了說明這一點,這裏是一個簡單的項目結構:

project/
    main.py 
    package/
     __init__.py 
     app.py 
     ui/
      __init__.py 
      mainwindow.py 

main.py腳本應該是非常小的,並且僅僅是這樣的:

if __name__ == '__main__': 

    import sys 
    from package import app 
    sys.exit(app.run()) 

app模塊內,該GUI模塊會像這樣導入:

from package.ui.mainwindow import Ui_MainWindow 

可以在包樹的任何位置使用相同的導入語法。所以,如果你增加了一個子包是這樣的:

project/
    main.py 
    package/
    ... 
     dialogs/
      __init__.py 
      search.py 

那麼search模塊將導入其GUI模塊是這樣的:

from package.ui.search import Ui_SearchDialog 

如果你組織你的所有Python項目以這種方式,應該從來沒有任何需要操縱sys.path爲了讓您的本地進口正常工作。

+0

我將如何去從mainwindow.py中調用駐留在app.py中的功能?正是我們想要從UI – chwi

+0

分離代碼所有的程序邏輯都將在* app.py *中。 * ui *目錄中的文件將由'pyuic'生成,並且只包含gui類。這些類只是簡單地導入到需要它們的模塊中。請參閱PyQt文檔中的[使用Qt Designer](http://pyqt.sourceforge.net/Docs/PyQt4/designer.html#using-the-generated-code)。 – ekhumoro

+0

所以人們通常會想出自己的設計,而且沒有自動加載器? – xotix

0

你可以用下面的方法把完整的路徑:

import sys 
import os.path as osp 
path = osp.dirname(__file__) 
sys.path.append(osp.join(path, 'UI/gui_sensors')) 
from gui_sensors_extended import Ui_SensorsWindow_Extended 

__file__包含路徑到當前模塊