导入Python类时未解析的参考

时间:2018-11-29 12:41:29

标签: python oop pycharm

首先,对于我的项目,我正在使用pycharm。在我的项目中,我使用Tkinter GUI。

为使代码简短,我将一个窗口的类从我的主文件夹main.py中取出,并移到了另一个名为login_gui的文件夹中。该类称为UserLogin

然后在我的main.py上尝试使用代码from login_gui import UserLogin导入类,但是在login_guiUserLogin上都出现“未解析的引用”错误。

我尝试放入。在login_gui前面,因此它显示为from .login_gui import UserLogin。这删除了参考错误,但是当我随后运行代码时,出现错误消息:

Traceback (most recent call last):
  File "C:/Users/Tom/.PyCharmCE2016.3/Project/A-Level_CS/main.py", line 5, in <module>
    from .login_gui import UserLogin
ModuleNotFoundError: No module named '__main__.login_gui'; '__main__' is not a package

这是一个自定义类,我想不通如何使用python解释器像其他任何python插件那样导入。任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:2)

如果您的文件夹/文件结构看起来像

C:/Users/Tom/.PyCharmCE2016.3/Project/A-Level_CS/
  main.py
  login_gui.py

然后from login_gui ...是正确的,而from .login_gui ...不是正确的(因为这暗示A-Level_CS是Python软件包,事实并非如此)。

但是,您需要将A-Level_CS文件夹添加为Sources Root,因此PyCharm知道如何解析这些引用。最简单的方法是在“项目”视图中右键单击该文件夹,然后选择“将目录标记为->源根目录:

enter image description here

当然,另一种选择是直接在A-Level_CS目录中创建/打开一个PyCharm项目。

答案 1 :(得分:0)

AKX解决方案是正确的,但是尝试使用软件包,可以使某些工作变得更容易。

https://docs.python.org/3.6/tutorial/modules.html#packages

enter image description here