Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python TypeError: __init__() got multiple values for argument 'master'

Trying to build a GUI in Python at the moment, and I'm stuck at this part in particular. Every time I try to run my code it just throws the error TypeError: __init__() got multiple values for argument 'master'. I can't seem to find where I'm passing it more than one value, and it's got me scratching my head. I tried searching the error but the fixes other people had listed I can't see how to make them work with this one. Any guidance would be much appreciated. See code sample below:

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)
like image 529
RandosaurusRex Avatar asked Dec 14 '22 11:12

RandosaurusRex


1 Answers

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

If you're using super(), you don't need to specify self explicitly.

You are getting that error because self is being interpreted as the argument for master. So it's like if you were calling __init__(master=self, master=master, **kwargs).

like image 87
Andrea Corbellini Avatar answered Jan 26 '23 01:01

Andrea Corbellini