Почему я получаю AttributeError, даже если импорт, орфография и расположение файла указаны правильно? - PullRequest
0 голосов
/ 15 ноября 2018
  1. Я использую PyCharm
  2. Все файлы находятся в каталоге 'venv'

    • venv
    • NoteFunction.py
    • NoteMainApp.py
    • ...

Я разделил свой код на пять отдельных файлов. Один «главный» файл, собирающий все остальные файлы и создающий в конечном итоге графический интерфейс. Префикс для файлов: «Примечание» и соответствующее описание.

Моя проблема сейчас заключается в импорте 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()

Я получаю сообщение об ошибке:

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)

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)
        ....

Если я закомментирую NoteTopMenu в основном файле, код запускается без проблем. Я проверил орфографию, но PyCharm также предлагает мне завершение кода. Поэтому PyCharm находит файл, модуль, мой класс и другие модули импортируются без проблем. Знаете ли вы, почему файл / модуль не найден или не может быть импортирован?

Полный код здесь на GitHub: MindNotez

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 15 ноября 2018

Вы вызываете NoteMainApp.py, который импортирует NoteTopMenu.py, который импортирует NoteMainApp.py, который не продолжает реимпорт NoteTopMenu.py (потому что импорт уже начался). Затем выполняется импорт NoteMainApp.py для анализа остальной части файла. На данный момент модуль NoteTopMenu определен, но у него нет никаких атрибутов (потому что вы еще не успели их определить) ... отсюда ошибка.

Я предлагаю, чтобы NoteTopMenu.py не импортировал NoteMainApp.py (и если есть какие-либо биты, которые нужны обоим файлам, они должны быть перемещены в другой файл, который оба могут импортировать)

...