Python:恰好有 2 个参数(给定 1 个)?
Python: exactly 2 arguments (1 given)?
这是我的文件:
import wx
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, None, id = wx.ID_ANY, title = u"FB Converter to Python", pos = wx.DefaultPosition, size = wx.Size( 450,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
bSizer1 = wx.BoxSizer( wx.VERTICAL )
self.infoCtrl1 = wx.InfoBar( self )
self.infoCtrl1.SetShowHideEffects( wx.SHOW_EFFECT_SLIDE_TO_RIGHT, wx.SHOW_EFFECT_SLIDE_TO_LEFT )
self.infoCtrl1.SetEffectDuration( 500 )
bSizer1.Add( self.infoCtrl1, 0, wx.EXPAND, 5 )
gSizer1 = wx.GridSizer( 0, 3, 2, 2 )
self.staticText1 = wx.StaticText( self, wx.ID_ANY, u"Prodject Folder", wx.DefaultPosition, wx.DefaultSize, 0 )
self.staticText1.Wrap( -1 )
gSizer1.Add( self.staticText1, 0, wx.ALL, 5 )
self.dirPicker2 = wx.DirPickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a folder", wx.DefaultPosition, wx.DefaultSize, wx.DIRP_DEFAULT_STYLE )
gSizer1.Add( self.dirPicker2, 0, wx.ALL, 5 )
gSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )
self.staticText3 = wx.StaticText( self, wx.ID_ANY, u"Convention Input Folder", wx.DefaultPosition, wx.DefaultSize, 0 )
self.staticText3.Wrap( -1 )
gSizer1.Add( self.staticText3, 0, wx.ALL, 5 )
self.dirPicker3 = wx.DirPickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a folder", wx.DefaultPosition, wx.DefaultSize, wx.DIRP_DEFAULT_STYLE )
gSizer1.Add( self.dirPicker3, 0, wx.ALL, 5 )
gSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )
self.staticText4 = wx.StaticText( self, wx.ID_ANY, u"Convention Output Folder", wx.DefaultPosition, wx.DefaultSize, 0 )
self.staticText4.Wrap( -1 )
gSizer1.Add( self.staticText4, 0, wx.ALL, 5 )
self.dirPicker4 = wx.DirPickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a folder", wx.DefaultPosition, wx.DefaultSize, wx.DIRP_DEFAULT_STYLE )
gSizer1.Add( self.dirPicker4, 0, wx.ALL, 5 )
gSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )
self.staticText5 = wx.StaticText( self, wx.ID_ANY, u"File Name To Be Converted", wx.DefaultPosition, wx.DefaultSize, 0 )
self.staticText5.Wrap( -1 )
gSizer1.Add( self.staticText5, 0, wx.ALL, 5 )
self.filePicker1 = wx.FilePickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a file", u"Python files (*.py)|*.py", wx.DefaultPosition, wx.DefaultSize, wx.FLP_DEFAULT_STYLE|wx.FLP_FILE_MUST_EXIST )
gSizer1.Add( self.filePicker1, 0, wx.ALL, 5 )
gSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )
bSizer1.Add( gSizer1, 1, wx.EXPAND, 5 )
bSizer3 = wx.BoxSizer( wx.VERTICAL )
sdbSizer1 = wx.StdDialogButtonSizer()
self.sdbSizer1Apply = wx.Button( self, wx.ID_APPLY )
sdbSizer1.AddButton( self.sdbSizer1Apply )
self.sdbSizer1Cancel = wx.Button( self, wx.ID_CANCEL )
sdbSizer1.AddButton( self.sdbSizer1Cancel )
sdbSizer1.Realize();
bSizer3.Add( sdbSizer1, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
bSizer1.Add( bSizer3, 1, wx.EXPAND, 5 )
self.SetSizer( bSizer1 )
self.Layout()
self.Centre( wx.BOTH )
def __del__( self ):
# ------------ Add widget program settings
# ------------ Call Populates
self.Show()
# ------------ Event handlers
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame1()
app.MainLoop()
当我 运行 它时,我收到此错误:
Exception AttributeError: "MyFrame1 instance has no attribute 'Show'"
in del of <main.MyFrame1 instance at
0x000000000315C788>> ignored
Traceback (most recent call last): File
"C:\myProjects\Python2\output\fbconvertBK.py", line 96, in
frame = MyFrame1() TypeError: init() takes exactly 2 arguments (1 given)
错误在这里:
frame = MyFrame1()
并且 class 第一行是:
class MyFrame1 ( wx.Frame ):
有人可以告诉我我哪里出错了吗?
您的 MyFrame1
class 需要一个参数:
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
pass
所以,你必须用 frame = MyFrame1(parent)
实例化它,而不是 frame = MyFrame1()
。
如果 MyFrame1
并不总是需要父框架,您也许可以使用可选参数。
class MyFrame1 ( wx.Frame ):
def __init__( self, parent=None ):
pass
正如 python-ninja Martijn Pieters 所指出的,您当然只需要删除它,因为您的 __init__
实现不依赖于 parent
参数。
def __init__(self):
您的 MyFrame1()
class 需要一个 parent
参数,但您没有提供它。 __init__
方法指定参数:
def __init__( self, parent ):
但是你没有传入:
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame1()
也许您打算将 app
作为父项传入?
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame1(app)
或者,通过给它一个默认值使父参数可选:
def __init__(self, parent=None):
你的 __init__
实现没有使用参数,所以你甚至可以在这里省略它:
def __init__(self):
这是我的文件:
import wx
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ ( self, None, id = wx.ID_ANY, title = u"FB Converter to Python", pos = wx.DefaultPosition, size = wx.Size( 450,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
bSizer1 = wx.BoxSizer( wx.VERTICAL )
self.infoCtrl1 = wx.InfoBar( self )
self.infoCtrl1.SetShowHideEffects( wx.SHOW_EFFECT_SLIDE_TO_RIGHT, wx.SHOW_EFFECT_SLIDE_TO_LEFT )
self.infoCtrl1.SetEffectDuration( 500 )
bSizer1.Add( self.infoCtrl1, 0, wx.EXPAND, 5 )
gSizer1 = wx.GridSizer( 0, 3, 2, 2 )
self.staticText1 = wx.StaticText( self, wx.ID_ANY, u"Prodject Folder", wx.DefaultPosition, wx.DefaultSize, 0 )
self.staticText1.Wrap( -1 )
gSizer1.Add( self.staticText1, 0, wx.ALL, 5 )
self.dirPicker2 = wx.DirPickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a folder", wx.DefaultPosition, wx.DefaultSize, wx.DIRP_DEFAULT_STYLE )
gSizer1.Add( self.dirPicker2, 0, wx.ALL, 5 )
gSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )
self.staticText3 = wx.StaticText( self, wx.ID_ANY, u"Convention Input Folder", wx.DefaultPosition, wx.DefaultSize, 0 )
self.staticText3.Wrap( -1 )
gSizer1.Add( self.staticText3, 0, wx.ALL, 5 )
self.dirPicker3 = wx.DirPickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a folder", wx.DefaultPosition, wx.DefaultSize, wx.DIRP_DEFAULT_STYLE )
gSizer1.Add( self.dirPicker3, 0, wx.ALL, 5 )
gSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )
self.staticText4 = wx.StaticText( self, wx.ID_ANY, u"Convention Output Folder", wx.DefaultPosition, wx.DefaultSize, 0 )
self.staticText4.Wrap( -1 )
gSizer1.Add( self.staticText4, 0, wx.ALL, 5 )
self.dirPicker4 = wx.DirPickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a folder", wx.DefaultPosition, wx.DefaultSize, wx.DIRP_DEFAULT_STYLE )
gSizer1.Add( self.dirPicker4, 0, wx.ALL, 5 )
gSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )
self.staticText5 = wx.StaticText( self, wx.ID_ANY, u"File Name To Be Converted", wx.DefaultPosition, wx.DefaultSize, 0 )
self.staticText5.Wrap( -1 )
gSizer1.Add( self.staticText5, 0, wx.ALL, 5 )
self.filePicker1 = wx.FilePickerCtrl( self, wx.ID_ANY, wx.EmptyString, u"Select a file", u"Python files (*.py)|*.py", wx.DefaultPosition, wx.DefaultSize, wx.FLP_DEFAULT_STYLE|wx.FLP_FILE_MUST_EXIST )
gSizer1.Add( self.filePicker1, 0, wx.ALL, 5 )
gSizer1.AddSpacer( ( 0, 0), 1, wx.EXPAND, 5 )
bSizer1.Add( gSizer1, 1, wx.EXPAND, 5 )
bSizer3 = wx.BoxSizer( wx.VERTICAL )
sdbSizer1 = wx.StdDialogButtonSizer()
self.sdbSizer1Apply = wx.Button( self, wx.ID_APPLY )
sdbSizer1.AddButton( self.sdbSizer1Apply )
self.sdbSizer1Cancel = wx.Button( self, wx.ID_CANCEL )
sdbSizer1.AddButton( self.sdbSizer1Cancel )
sdbSizer1.Realize();
bSizer3.Add( sdbSizer1, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
bSizer1.Add( bSizer3, 1, wx.EXPAND, 5 )
self.SetSizer( bSizer1 )
self.Layout()
self.Centre( wx.BOTH )
def __del__( self ):
# ------------ Add widget program settings
# ------------ Call Populates
self.Show()
# ------------ Event handlers
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame1()
app.MainLoop()
当我 运行 它时,我收到此错误:
Exception AttributeError: "MyFrame1 instance has no attribute 'Show'" in del of <main.MyFrame1 instance at 0x000000000315C788>> ignored
Traceback (most recent call last): File "C:\myProjects\Python2\output\fbconvertBK.py", line 96, in frame = MyFrame1() TypeError: init() takes exactly 2 arguments (1 given)
错误在这里:
frame = MyFrame1()
并且 class 第一行是:
class MyFrame1 ( wx.Frame ):
有人可以告诉我我哪里出错了吗?
您的 MyFrame1
class 需要一个参数:
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
pass
所以,你必须用 frame = MyFrame1(parent)
实例化它,而不是 frame = MyFrame1()
。
如果 MyFrame1
并不总是需要父框架,您也许可以使用可选参数。
class MyFrame1 ( wx.Frame ):
def __init__( self, parent=None ):
pass
正如 python-ninja Martijn Pieters 所指出的,您当然只需要删除它,因为您的 __init__
实现不依赖于 parent
参数。
def __init__(self):
您的 MyFrame1()
class 需要一个 parent
参数,但您没有提供它。 __init__
方法指定参数:
def __init__( self, parent ):
但是你没有传入:
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame1()
也许您打算将 app
作为父项传入?
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame1(app)
或者,通过给它一个默认值使父参数可选:
def __init__(self, parent=None):
你的 __init__
实现没有使用参数,所以你甚至可以在这里省略它:
def __init__(self):