为什么即使导入,拼写和文件位置正确,我也会收到AttributeError?

Ale*_*x_P 5 python attributeerror python-3.x

  1. 我正在使用PyCharm
  2. 所有文件都在'venv'目录中

    • VENV
    • NoteFunction.py
    • NoteMainApp.py
    • ...

我将代码分成五个单独的文件.一个'主'文件,收集所有其他文件并最终创建GUI.文件的前缀是"注意",后面是适当的描述.

我现在的问题是将'NoteTopMenu'导入主文件'NoteMainApp'.代码是:

import NoteStatusbar as SB
import NoteTopMenu as TM
import NoteWidgets as NW
import tkinter as tk


class MainApp(tk.Frame):

    def __init__(self, parent):

        tk.Frame.__init__(self,parent)
        super().__init__(parent)
        self.topbar = TM.TopMenu(parent)
        self.widget = NW.FrontFrames(parent)
        self.statusbar = SB.StatusBar(parent)


root = tk.Tk()
MainApp(root).pack(side="top", fill="both")

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

Traceback (most recent call last):
  File "C:/Users/PycharmProjects/MindNotez/NoteMainApp.py", line 2, in <module>
    import NoteTopMenu as TM
  File "C:\Users\PycharmProjects\MindNotez\NoteTopMenu.py", line 2, in <module>
    import NoteMainApp as Main
  File "C:\Users\PycharmProjects\MindNotez\NoteMainApp.py", line 29, in <module>
    MainApp(root).pack(side="top", fill="both")
  File "C:\Users\PycharmProjects\MindNotez\NoteMainApp.py", line 13, in __init__
    self.topbar = TM.TopMenu(parent)
Run Code Online (Sandbox Code Playgroud)

AttributeError:模块'NoteTopMenu'没有属性'TopMenu'

NoteTopMenu中的代码是:

import NoteMainApp as Main
import NoteWidgets as NW
import tkinter as tk


class TopMenu(NW.FrontFrames):
    """Class creating the top menu bar."""
    def __init__(self, master):
        super().__init__(master)
        # *******Top-Navigation Bar (tnb)**********
        tnb = tk.Menu(master)
        Main.root.config(menu=tnb)
        ....
Run Code Online (Sandbox Code Playgroud)

如果我在主文件中注释NoteTopMenu,代码运行没有问题.我检查了我的拼写,但PyCharm也提供了代码完成.因此,PyCharm发现文件,模块,我的类和其他模块都是导入的,没有问题.你知道为什么没有找到文件/模块或导入失败?

完整代码在GitHub上:MindNotez

非常感谢您的帮助!

Mar*_*ica 6

您调用NoteMainApp.py其进口NoteTopMenu.py的进口这NoteMainApp.py其中也没有去重新导入NoteTopMenu.py(因为进口已经开始).然后导入NoteMainApp.py继续解析文件的其余部分.此时模块NoteTopMenu已定义,但它没有任何属性(因为你尚未定义它们)...因此错误.

我建议NoteTopMenu.py不要导入NoteMainApp.py(如果有两个文件需要的位,它们应该被移动到另一个可以导入的文件中)