Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:\uuuu init\uuuuuu()至少接受3个参数(给定1个)_Python_User Interface_Wxpython_Wxformbuilder - Fatal编程技术网

Python TypeError:\uuuu init\uuuuuu()至少接受3个参数(给定1个)

Python TypeError:\uuuu init\uuuuuu()至少接受3个参数(给定1个),python,user-interface,wxpython,wxformbuilder,Python,User Interface,Wxpython,Wxformbuilder,这是我的GUI代码: import wx import os.path class MainWindow(wx.Frame): #def __init__(self, filename=''): #super(MainWindow, self).__init__(None, size=(800,600)) def __init__(self, parent, title, *args, **kwargs): super(MainWindow,s

这是我的GUI代码:

import wx
import os.path


class MainWindow(wx.Frame):
    #def __init__(self, filename=''):
        #super(MainWindow, self).__init__(None, size=(800,600))
    def __init__(self, parent, title, *args, **kwargs):
        super(MainWindow,self).__init__(parent, title = title, size = (800,600))
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos =  wx.DefaultPosition, size = wx.Size( 800,608 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
        grid = wx.GridSizer( 2, 2, 0, 0 )

        self.filename = filename
        self.dirname = '.'
        self.CreateInteriorWindowComponents()
        self.CreateExteriorWindowComponents()

    def CreateInteriorWindowComponents(self):


        staticbox = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u"Enter text" ), wx.VERTICAL )
        staticbox.Add( self.m_textCtrl1, 0, wx.ALL|wx.EXPAND, 5 )
        self.m_textCtrl1 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( -1,250 ), wx.TE_MULTILINE)
        self.m_textCtrl1.SetMaxLength(10000)

        self.Submit = wx.Button( self, wx.ID_ANY, u"Submit", wx.DefaultPosition, wx.DefaultSize, 0 )
        staticbox.Add( self.Submit, 0, wx.ALL, 5 )

    def CreateExteriorWindowComponents(self):
        ''' Create "exterior" window components, such as menu and status
            bar. '''
        self.CreateMenu()
        self.CreateStatusBar()
        self.SetTitle()

    def CreateMenu(self):
        fileMenu = wx.Menu()
        for id, label, helpText, handler in \
            [(wx.ID_ABOUT, '&About', 'Storyteller 1.0 -',
                self.OnAbout),
             (wx.ID_OPEN, '&Open', 'Open a new file', self.OnOpen),
             (wx.ID_SAVE, '&Save', 'Save the current file', self.OnSave),
             (wx.ID_SAVEAS, 'Save &As', 'Save the file under a different name',
                self.OnSaveAs),
             (None, None, None, None),
             (wx.ID_EXIT, 'E&xit', 'Terminate the program', self.OnExit)]:
            if id == None:
                fileMenu.AppendSeparator()
            else:
                item = fileMenu.Append(id, label, helpText)
                self.Bind(wx.EVT_MENU, handler, item)

        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, '&File') # Add the fileMenu to the MenuBar
        self.SetMenuBar(menuBar)  # Add the menuBar to the Frame

    def SetTitle(self):
        # MainWindow.SetTitle overrides wx.Frame.SetTitle, so we have to
        # call it using super:
        super(MainWindow, self).SetTitle('Editor %s'%self.filename)


    # Helper methods:

    def defaultFileDialogOptions(self):
        ''' Return a dictionary with file dialog options that can be
            used in both the save file dialog as well as in the open
            file dialog. '''
        return dict(message='Choose a file', defaultDir=self.dirname,
                    wildcard='*.*')

    def askUserForFilename(self, **dialogOptions):
        dialog = wx.FileDialog(self, **dialogOptions)
        if dialog.ShowModal() == wx.ID_OK:
            userProvidedFilename = True
            self.filename = dialog.GetFilename()
            self.dirname = dialog.GetDirectory()
            self.SetTitle() # Update the window title with the new filename
        else:
            userProvidedFilename = False
        dialog.Destroy()
        return userProvidedFilename

    # Event handlers:

    def OnAbout(self, event):
        dialog = wx.MessageDialog(self, 'A sample editor\n'
            'in wxPython', 'About Sample Editor', wx.OK)
        dialog.ShowModal()
        dialog.Destroy()

    def OnExit(self, event):
        self.Close()  # Close the main window.

    def OnSave(self, event):
        textfile = open(os.path.join(self.dirname, self.filename), 'w')
        textfile.write(self.control.GetValue())
        textfile.close()

    def OnOpen(self, event):
        if self.askUserForFilename(style=wx.OPEN,
                                   **self.defaultFileDialogOptions()):
            textfile = open(os.path.join(self.dirname, self.filename), 'r')
            self.control.SetValue(textfile.read())
            textfile.close()

    def OnSaveAs(self, event):
        if self.askUserForFilename(defaultFile=self.filename, style=wx.SAVE,
                                   **self.defaultFileDialogOptions()):
            self.OnSave(event)


app = wx.App()
frame = MainWindow()
frame.Show()
app.MainLoop()
我要去拿

TypeError:: __init__() takes at least 3 arguments (1 given)
在最后第三行
frame=MainWindow()

如何确保参数列表匹配?我想我对过去的自己、父母或其他事情有点困惑

救命啊

编辑:@mhlester:我做了你建议的更改,但现在我有一个不同的错误:

TypeError: in method 'new_Frame', expected argument 1 of type 'wxWindow *'
事实上,这就是全文的内容:

 Traceback (most recent call last):
  File "C:\Users\BT\Desktop\BEt\gui2.py", line 115, in <module>
    frame = MainWindow(app,'Storyteller')
  File "C:\Users\BT\Desktop\BE\gui2.py", line 9, in __init__
    super(MainWindow,self).__init__(parent, title = title, size = (800,600))
  File "C:\Python27\lib\site-packages\wx-3.0-msw\wx\_windows.py", line 580, in __init__
    _windows_.Frame_swiginit(self,_windows_.new_Frame(*args, **kwargs))
TypeError: in method 'new_Frame', expected argument 1 of type 'wxWindow *'
回溯(最近一次呼叫最后一次):
文件“C:\Users\BT\Desktop\BEt\gui2.py”,第115行,在
框架=主窗口(应用程序,“故事讲述者”)
文件“C:\Users\BT\Desktop\BE\gui2.py”,第9行,在初始化中__
super(主窗口,self)。\uuuuu init\uuuuuuu(父级,标题=标题,大小=(800600))
文件“C:\Python27\lib\site packages\wx-3.0-msw\wx\\u windows.py”,第580行,在uu init中__
_视窗框架开关(自,视窗新框架(*args,**kwargs))
TypeError:在方法“new_Frame”中,应为“wxWindow*”类型的参数1

主窗口
声明:

def __init__(self, parent, title, *args, **kwargs):
实例化类时,
self
会自动传递,但需要将
parent
title
传递到
MainWindow()
调用:

frame = MainWindow(app, 'Window Title') # i'm not sure if app is right for parent, but i assume it is

您可以忽略
*args
**kwargs
,因为通过
\uuuu init\uuuu
函数读取时,它们根本不被使用…

您将init设置为接受3个值,然后不传递任何内容。由于此框架将是顶级窗口,因此可以向其传递None的父级和某种类型的标题字符串:

frame = MainWindow(None, "test")
下一个问题是您尝试使用两个初始化例程:超级例程和常规例程。您只能使用其中一个,但不能同时使用两个!我保留了超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超超。我还将self.filename更改为空字符串,因为“filename”显然没有定义,并且我注释掉了构建其他小部件的调用,因为代码不完整

import wx
import os.path


class MainWindow(wx.Frame):

    def __init__(self, parent, title, *args, **kwargs):
        super(MainWindow,self).__init__(parent, title = title, size = (800,600))
        #wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos =  wx.DefaultPosition, size = wx.Size( 800,608 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
        grid = wx.GridSizer( 2, 2, 0, 0 )

        self.filename = ""
        self.dirname = '.'
        #self.CreateInteriorWindowComponents()
        #self.CreateExteriorWindowComponents()

    def CreateInteriorWindowComponents(self):


        staticbox = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u"Enter text" ), wx.VERTICAL )
        staticbox.Add( self.m_textCtrl1, 0, wx.ALL|wx.EXPAND, 5 )
        self.m_textCtrl1 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( -1,250 ), wx.TE_MULTILINE)
        self.m_textCtrl1.SetMaxLength(10000)

        self.Submit = wx.Button( self, wx.ID_ANY, u"Submit", wx.DefaultPosition, wx.DefaultSize, 0 )
        staticbox.Add( self.Submit, 0, wx.ALL, 5 )

    def CreateExteriorWindowComponents(self):
        ''' Create "exterior" window components, such as menu and status
            bar. '''
        self.CreateMenu()
        self.CreateStatusBar()
        self.SetTitle()

    def CreateMenu(self):
        fileMenu = wx.Menu()
        for id, label, helpText, handler in \
            [(wx.ID_ABOUT, '&About', 'Storyteller 1.0 -',
                self.OnAbout),
             (wx.ID_OPEN, '&Open', 'Open a new file', self.OnOpen),
             (wx.ID_SAVE, '&Save', 'Save the current file', self.OnSave),
             (wx.ID_SAVEAS, 'Save &As', 'Save the file under a different name',
                self.OnSaveAs),
             (None, None, None, None),
             (wx.ID_EXIT, 'E&xit', 'Terminate the program', self.OnExit)]:
            if id == None:
                fileMenu.AppendSeparator()
            else:
                item = fileMenu.Append(id, label, helpText)
                self.Bind(wx.EVT_MENU, handler, item)

        menuBar = wx.MenuBar()
        menuBar.Append(fileMenu, '&File') # Add the fileMenu to the MenuBar
        self.SetMenuBar(menuBar)  # Add the menuBar to the Frame

    def SetTitle(self):
        # MainWindow.SetTitle overrides wx.Frame.SetTitle, so we have to
        # call it using super:
        super(MainWindow, self).SetTitle('Editor %s'%self.filename)


    # Helper methods:

    def defaultFileDialogOptions(self):
        ''' Return a dictionary with file dialog options that can be
            used in both the save file dialog as well as in the open
            file dialog. '''
        return dict(message='Choose a file', defaultDir=self.dirname,
                    wildcard='*.*')

    def askUserForFilename(self, **dialogOptions):
        dialog = wx.FileDialog(self, **dialogOptions)
        if dialog.ShowModal() == wx.ID_OK:
            userProvidedFilename = True
            self.filename = dialog.GetFilename()
            self.dirname = dialog.GetDirectory()
            self.SetTitle() # Update the window title with the new filename
        else:
            userProvidedFilename = False
        dialog.Destroy()
        return userProvidedFilename

    # Event handlers:

    def OnAbout(self, event):
        dialog = wx.MessageDialog(self, 'A sample editor\n'
            'in wxPython', 'About Sample Editor', wx.OK)
        dialog.ShowModal()
        dialog.Destroy()

    def OnExit(self, event):
        self.Close()  # Close the main window.

    def OnSave(self, event):
        textfile = open(os.path.join(self.dirname, self.filename), 'w')
        textfile.write(self.control.GetValue())
        textfile.close()

    def OnOpen(self, event):
        if self.askUserForFilename(style=wx.OPEN,
                                   **self.defaultFileDialogOptions()):
            textfile = open(os.path.join(self.dirname, self.filename), 'r')
            self.control.SetValue(textfile.read())
            textfile.close()

    def OnSaveAs(self, event):
        if self.askUserForFilename(defaultFile=self.filename, style=wx.SAVE,
                                   **self.defaultFileDialogOptions()):
            self.OnSave(event)


app = wx.App()
frame = MainWindow(None, "test")
frame.Show()
app.MainLoop()

@Bhavika看来我对父母应该是什么错了。它说它需要是另一个
wxWindow
。我只知道这些,对不起。也许其他人已经找到了这个新问题的答案。是的,我试了你说的,但没有成功。请参阅下面的解决方案@巴维卡,好极了!很高兴有人知道他们在做什么。