如何在 python 中创建包和模块?
How to create a package and modules in python?
我是 python 的新手,所以我尝试了 python 包和模块,但是我的项目出现了错误,我不知道这里面有什么问题。,
Menu.InitUI
TypeError: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()`
简短的回答是 def InitUI(self):
和 def OnQuit(self, e):
属于 class,但您似乎没有将它们放在 class 中。 self
指的是 class 函数所属的当前实例。
如果 def InitUI() 方法不是任何 "Menu" class 那么你不需要任何 self 参数。无需执行 Menu.InitUI(),因为您已经导入了 InitUI() 方法。所以简单地像 InitUI() 一样调用它。正如您已将函数声明为 InitUI(self) 但调用为 Menu.InitUI() 那样,这就是问题出现的原因,因为我们期望参数自身的方法。从 InitUI() 中删除 self 并在没有 "Menu" 的情况下简单地调用 InitUI() 将解决您的问题。
就像是:
在Menu.py
def InitUI():
---body---
在Main.py中:
----other peice of code----
InitUI()
----other peice of code----
我是 python 的新手,所以我尝试了 python 包和模块,但是我的项目出现了错误,我不知道这里面有什么问题。,
Menu.InitUI
TypeError: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()`
简短的回答是 def InitUI(self):
和 def OnQuit(self, e):
属于 class,但您似乎没有将它们放在 class 中。 self
指的是 class 函数所属的当前实例。
如果 def InitUI() 方法不是任何 "Menu" class 那么你不需要任何 self 参数。无需执行 Menu.InitUI(),因为您已经导入了 InitUI() 方法。所以简单地像 InitUI() 一样调用它。正如您已将函数声明为 InitUI(self) 但调用为 Menu.InitUI() 那样,这就是问题出现的原因,因为我们期望参数自身的方法。从 InitUI() 中删除 self 并在没有 "Menu" 的情况下简单地调用 InitUI() 将解决您的问题。 就像是: 在Menu.py
def InitUI():
---body---
在Main.py中:
----other peice of code----
InitUI()
----other peice of code----