[英]Problem when importing modules when files are at different folders
目的
我編寫了 2 個運行良好的程序。 現在,我想為這兩個程序創建一個 GUI。 我的想法是創建一個 window,其中 select 是您要運行的軟件,然后根據您單擊的哪個,將打開一個新的 window。 這個 window 將用於詢問用戶我在執行這兩個軟件之前手動輸入的輸入。 然后,在這個新的 window 中,用戶將單擊一個按鈕,軟件將使用用戶介紹的參數加載。
軟件將使用 Qt5 和 python 3 運行。
我如何進行
我使用 Qt Designer 創建了 3 個文件。 一個是主 window(main.py,它創建了一個名為 frame_init 的 window),當用戶單擊一個按鈕時,它會打開第二個 window。 這第二個 window 如果是第一個或第二個軟件,則不同。 例如,要打開軟件 1,我有:
def open_software_first(self):
self.software_first = QtWidgets.QMainWindow()
self.ui = Ui_software_first()
self.ui.setupUi(self.software_first)
self.software_first.show() #the file is called first.py
frame_init.hide()
在 first.py 中有一個按鈕,用戶可以按下它來啟動一切:
import A.main as start_functions
def start_first_software(self):
self.btn_start.setEnabled(False)
start_functions.start(values) #values are different properties from checkbox, inputlines...
在這里,我所做的是將 3 個文件放在一個文件夾中。 創建兩個文件夾(A 用於軟件 1,B 用於軟件 2)並將每個軟件的文件放在其自己的文件夾中。 這就是導入有這個 A 的原因。在所有文件夾中,我放置了一個名為“__ init__.py”的空文件。 最初,我運行打開 frame_init 的軟件。 對於此處注釋的文件,結構為:
application
├── __init__.py
├── main.py
├── first.py
├── second.py
├── A
└── __init__.py
└── main.py
└── AAAAAA.py
└── BBBBBB.py
└── ...
├── B
└── __init__.py
└── ...
問題
導入如何必須在 A 文件夾中的軟件 1 的主目錄中? 要在我使用的 main 中的其他文件中導入函數:
import AAAAA as a
import BBBBB as b
等等。 現在,它不起作用。 我必須說:
import A.AAAAA as a
import A.BBBBB as b
所以它就像是從加載 GUI 的文件夾中導入一樣。 問題是,例如在文件 AAAAA 中,我有一個到 BBBBB 的導入:
import BBBBB as b
在 BBBBB 文件中,我需要 AAAAA:
import AAAAA as a
主要加載“將 A.AAAAA 導入為 a”。 然后它在 AAAA 中調用 function。 此 function 在 BBBBB 中使用 function。 現在當加載 BBBBB 中的 function 時出現錯誤:
“ModuleNotFoundError:沒有名為‘AAAAA’的模塊”。 如果我輸入 A.AAAAA 那么它會說:“AttributeError:模塊'A'沒有屬性'AAAAA'”
我如何加載這個導入? 我很抱歉沒有在這里發布一個可行的例子,但如果我把所有東西都放在這里,我的事情就太亂了......
終於我開始工作了!
按照Sorin 的回答,將該代碼復制到子文件夾中的每個文件中,將其代碼中的“子文件夾”文本更改為您的子文件夾的名稱,然后像往常一樣導入所有內容,就好像它在同一個文件夾中一樣。 不要放入某些文件“import subfolder.yourpyfile as XXX”和其他“import yourpyfile as XXX”。 務必將所有這些都“導入您的pyfile作為XXX”。 不知道為什么它失敗了,但這有效。 不要忘記在每個文件夾中包含那些空的init .py 文件。
PS。 不要在兩個同名文件夾中包含文件。 導入將加載一個,但不會加載另一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.