A default argument is the value ('' in your case) that is assigned to a formal parameter (text in your case) in a function (__init__ in your case); non-default argument means that such a default argument is missing for a formal parameter (color_font in your case).
Python supports default arguments only at the end of the parameter list, so that you can call a function with a minimum of arguments.
Normally, when designing a function (the same is true for __init__), you chose such an order of parameters with default arguments that the most specialized options go rightmost. That's why I'd suggest to add a default argument to font_color as well and keep it the last parameter. It's much more likely that you have lots of buttons with different text and not as many different font colors but with the default text which is empty.
In other words, change your code into the following
class button():
def __init__(self, color, x, y, width, height, text='', color_font='black'):
self.color = color
self.x = x
self.y = y
self.width = width
self.height = height
self.text = text
self.color_font = color_font
useful default arguments
Default arguments are there to make calling a function easier.
to me this looks somewhat okay
button('gray', 4, 4, 64, 16, 'one', 'red')
button('gray', 4, 24, 64, 16, 'two')
button('gray', 4, 44, 64, 16, 'three')
but this looks somewhat odd
button('gray', 4, 4, 64, 16, 'red', 'hello')
button('gray', 4, 24, 64, 16, 'blue')
button('gray', 4, 44, 64, 16, 'green')
when the text (in different font colors) is empty. Of course, there is much more space for optimization in your class, think of the repetition potential for color or height.
one more advice
Try to read as much from an error message as you can, and read careful
SyntaxError: non-default argument follows default argument.
The error does not tell you about a non-default parameter but about a non-default argument. Arguments are the values you pass to a function when you call it, if you don't pass an argument in a place belonging to a parameter, python uses a default argument for it, if it cannot find such, it raises an error. This is the reason why parameters with default arguments do not make sense before parameters without: mandatory arguments (the ones without default argument) match their parameter by position, and as to reach this position, you have to place the correct amount of arguments before it, default arguments would never get used this way.
color_fontis a non-default argument, and it followstextwhich is a default argument (='').font_colorrightmost, see my answer.