2015-10-15 214 views
2

试图在Python中构建一个GUI,而且我特别陷入这部分。每次我尝试运行我的代码时,它都会抛出错误TypeError: __init__() got multiple values for argument 'master'。我似乎无法找到我将它超过一个价值的地方,这让我挠了挠头。我尝试搜索错误,但其他人列出的修复程序我无法看到如何使它们与这一个工作。任何指导将不胜感激。请参见下面的代码示例:Python TypeError:__init __()获得了参数'master'的多个值

class Plotter(tk.Canvas): 
    """Creates a canvas for use in a GUI 
    Plotter() -> Canvas 
    """ 
    def __init__(self, master, **kwargs): 
     super().__init__(self, master = master, **kwargs) 
     self.bind("<Configure>", self.on_resize) 
     self.height = self.winfo_reqheight() 
     self.width = self.winfo_reqwidth() 
     self.bg = 'white' 
     self.relief = 'raised' 

class AnimalDataPlotApp(object): 
    """This is the top level class for the GUI, and is hence responsible for 
    creating and maintaining instances of the above glasses 
    """ 

    def __init__(self, master): 
     """Initialises the window and creates the base window for the GUI. 
     __init__() -> None 
     """ 
     master.title('Animal Data Plot App') 
     self._master = master 
     self._text = tk.Text(master) 
     self._text.pack 
     menubar = tk.Menu(master) 
     master.config(menu = menubar) 
     filemenu = tk.Menu(menubar) #puts filemenu into the menubar 
     menubar.add_cascade(label = 'File', menu = filemenu) 
     filemenu.add_command(label = 'Open', command = self.open_file) 

     #frame for canvas 
     plotter_frame = tk.Frame(master, bg = 'red') 
     plotter_frame.pack(side = tk.RIGHT, anchor = tk.NW, fill = tk.BOTH, expand = True) 

     #frame for buttons 
     button_frame = tk.Frame(master, bg = 'yellow') 
     button_frame.pack(side=tk.TOP, anchor=tk.NW, ipadx=50, fill = tk.X) 

     #Label on the top left 
     left_label = tk.Label(button_frame, text='Animal Data Sets', bg='orange') 
     left_label.pack(side=tk.TOP, anchor=tk.N, fill=tk.X) 

     #second frame, for selection list 
     selection_frame = tk.Frame(master, bg = 'blue') 
     selection_frame.pack(side = tk.LEFT, anchor=tk.NW, fill = tk.BOTH, expand = True) 

     #draw buttons in frame 
     select = tk.Button(button_frame, text ='Select') 
     select.pack(side=tk.TOP, anchor=tk.N) 
     deselect = tk.Button(button_frame, text='Deselect') 
     deselect.pack(side=tk.TOP, anchor=tk.N) 

     self.selectionbox = SelectionBox(selection_frame) 
     self.selectionbox.pack(side = tk.TOP, expand = True, fill=tk.BOTH) 
     #self._selectionbox.show_animals(self._data) 

     self.plotter = Plotter(plotter_frame) 
     self.plotter.pack(side = tk.TOP, expand = True, fill=tk.BOTH) 

回答

5
super().__init__(self, master = master, **kwargs) 

如果您使用super(),你并不需要明确指定self

您正在收到该错误,因为self被解释为master的参数。所以就像你打电话给__init__(master=self, master=master, **kwargs)

+0

啊,解释它,谢谢^ _^ – RandosaurusRex

3

的问题是在Plotter.__init__()以下行 -

super().__init__(self, master = master, **kwargs) 

调用父类的__init__方法时,您无需通过self说法,当你这样做,这是越来越视为master参数为父,然后当您尝试通过mastermaster=master时,它会导致您的错误。

你应该简单地做 -

super().__init__(master = master, **kwargs) 
+1

这也解释了,谢谢^ _ ^ – RandosaurusRex

相关问题