【问题标题】:Problem when importing modules when files are at different folders文件位于不同文件夹时导入模块时出现问题
【发布时间】:2021-01-23 23:28:14
【问题描述】:

目的

我编写了 2 个运行良好的程序。现在,我想为这两个程序创建一个 GUI。我的想法是创建一个窗口,在其中选择要运行的软件,然后根据您单击的内容,将打开一个新窗口。该窗口将用于询问用户我在执行这两个软件之前手动输入的输入。然后,在这个新窗口中,用户将单击一个按钮,软件将使用用户介绍的参数加载。

软件将使用 Qt5 和 python 3 运行。

我如何进行

我使用 Qt Designer 创建了 3 个文件。一个是主窗口(main.py,它创建了一个名为 frame_init 的窗口),当用户单击一个按钮时,它会打开第二个窗口。如果它是第一个或第二个软件,则第二个窗口是不同的。例如,要打开软件 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

main 加载“import A.AAAAA as a”。然后它调用 AAAAA 中的一个函数。此函数使用 BBBBB 中的函数。现在加载 BBBBB 中的函数时出现错误:

“ModuleNotFoundError:没有名为‘AAAAA’的模块”。如果我输入 A.AAAAA 那么它会说:“AttributeError:模块'A'没有属性'AAAAA'”

如何加载此导入?很抱歉没有在这里发布一个可行的例子,但如果我把所有东西都放在这里,我的事情就太乱了......

【问题讨论】:

  • 该问题与 Qt 或 PyQt5 无关,因为如果您使用其他库,问题将是相同的。最好使用涉及问题的技术的标签

标签: python import directory


【解决方案1】:

我终于开始工作了!

按照Sorin's answer,将该代码复制到子文件夹中的每个文件中,将其代码中的“子文件夹”文本更改为您的子文件夹的名称,然后像往常一样导入所有内容,就像它在同一个文件夹中一样.不要放入某些文件“import subfolder.yourpyfile as XXX”和其他“import yourpyfile as XXX”。务必将它们全部“导入您的pyfile作为XXX”。不知道为什么它失败了,但这有效。不要忘记在每个文件夹中包含那些空的 init.py 文件。

PS。不要在两个同名文件夹中包含文件。导入将加载一个,但不会加载另一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 2021-12-26
    • 2020-11-08
    • 1970-01-01
    相关资源
    最近更新 更多