Как создать пакет и модули в python?

Я новичок в python, поэтому я пробовал пакеты и модули python, но у меня была ошибка в моем проекте, я не знаю, что в этом не так.,

Меню.InitUI

Ошибка типа: InitUI() отсутствует 1 обязательный позиционный аргумент: 'self'

У меня было три файла
1)__init__.py
2)Main.py
3)Menu.Py< /сильный>

     `<----------------__init__.py file------------>`
        from Main import main
        from Menu import InitUI

      <-------------------Menu.Py file------------>


    import wx

     def InitUI(self):

        menubar = wx.MenuBar()

        fileMenu = wx.Menu()
        fileMenu.Append(wx.ID_NEW, '&New')
        fileMenu.Append(wx.ID_OPEN, '&Open')
        fileMenu.Append(wx.ID_SAVE, '&Save')
        fileMenu.AppendSeparator()

        imp = wx.Menu()
        imp.Append(wx.ID_ANY,'Import File')

        fileMenu.AppendMenu(wx.ID_ANY,'I&mport',imp)

        qmi = wx.MenuItem(fileMenu,wx.ID_EXIT,'&Quit\tCtrl+Q')
        fileMenu.AppendItem(qmi)

        # EDIT Menu
         editMenu = wx.Menu()
         editMenu.Append(wx.ID_EDIT, '&Edit')


        #Help Menu
        helpMenu = wx.Menu()
        helpMenu.Append(wx.ID_HELP,'&Help')

        self.Bind(wx.EVT_MENU, self.OnQuit,qmi)

        menubar.Append(fileMenu, '&File')
        self.SetMenuBar(menubar)

        menubar.Append(editMenu, '&Edit')
        self.SetMenuBar(menubar)

        menubar.Append(helpMenu, '&Help')
        self.SetMenuBar(menubar)


        self.Centre()
        self.Show(True)


    def OnQuit(self,e):
        self.Close()

     <----------------Main.py--------------------->

         class Main_Frame(wx.Frame):
             def __init__(self,parent,title):
             super(Main_Frame,self).__init__(parent,title="Siemens MTBF",
                                                  size=   (1280,960)) 

         Menu.InitUI()       

         def main():
                ex = wx.App()
                Main_Frame(None,title='Center')
                ex.MainLoop()    


          if __name__ == '__main__':

           main()`

person mukesh krishnan    schedule 03.06.2016    source источник
comment
есть ли class Menu(...): где-то выше def InitUI(self):?   -  person Will    schedule 03.06.2016
comment
Нет меню класса, только метод def InitUI(self) в Menu.py. Нужно ли создавать класс в Menu.py   -  person mukesh krishnan    schedule 03.06.2016
comment
Привет @mukeshkrishnan, если метод def InitUI() не относится к какому-либо классу меню, тогда вам не нужен в этом параметр self. Нет необходимости делать Menu.InitUI(), так как вы импортировали метод InitUI(). Поэтому просто назовите его как InitUI(). Поскольку вы объявили функцию как InitUI(self), но вызвали как Menu.InitUI(), вот почему проблема возникает как метод, ожидающий параметр self.   -  person sagar    schedule 03.06.2016


Ответы (2)


Короткий ответ заключается в том, что def InitUI(self): и def OnQuit(self, e): должны принадлежать к классу, и, похоже, у вас их нет в классе. self относится к текущему экземпляру класса, к которому принадлежит функция.

person Will    schedule 03.06.2016
comment
Можете ли вы поделиться кодом .. который вы предлагаете модификацию - person mukesh krishnan; 03.06.2016
comment
Это невозможно сделать, не видя остальной код, его структуру и то, что вызывает что. - person Will; 03.06.2016
comment
@ Уилл, я поместил весь свой код в сам вопрос. У меня было только три файла, к вашему сведению, заранее спасибо. - person mukesh krishnan; 03.06.2016
comment
Тогда на этот вопрос сложно ответить — похоже, вы скопировали и вставили его часть, потому что без class self вообще не имеет смысла. - person Will; 03.06.2016
comment
Нет, я не копировал и не вставлял его. Что я сделал, я закодировал фрейм wxpython с меню. Позже я решил сделать его структурным, поэтому я последовал некоторому руководству и изменил свой код и сделал его тремя файлами. - person mukesh krishnan; 03.06.2016

если метод def InitUI() не относится к какому-либо классу «Меню», тогда вам не нужен какой-либо параметр self в этом. Нет необходимости делать Menu.InitUI(), так как вы импортировали метод InitUI(). Поэтому просто назовите его как InitUI(). Поскольку вы объявили функцию как InitUI(self), но вызвали как Menu.InitUI(), вот почему проблема возникает как метод, ожидающий параметр self. Удалите себя из InitUI() и просто вызовите InitUI() без «Меню», чтобы решить вашу проблему. Это как: В Menu.py

def InitUI():
    ---body---

В Main.py:

----other peice of code----
InitUI()
----other peice of code----
person sagar    schedule 03.06.2016
comment
Но если я взял себя из него, он покажет мне ошибку Undefined menubar (34-я строка), точно так же я получил ошибку в строке: 37,40,43... Так что поделитесь со мной полным кодом. Заранее спасибо - person mukesh krishnan; 03.06.2016
comment
@mukeshkrishnan поместите метод InitiUI(self) внутри класса, в котором есть SetMenuBar(). See self используется для функций-членов класса. Поэтому создайте объект этого класса, который содержит метод InitiUI(self), а затем с помощью этого объекта вызовите метод InitiUI(). - person sagar; 03.06.2016
comment
Menu.InitUI() не будет работать. Создать объект Меню. Используя этот объект, вызовите InitUI. Пример: объект меню. объект.InitUI() - person sagar; 03.06.2016