The spinner is in a GridLayout. The way you have the Screen setup the GridLayout as a a top row that has a height of 50, and the next row, takes up the rest of the screen. The Spinner is sitting in the bottom of that second row in the GridLayout.
You could put a RelativeLayout in the GridLayout, and the Spinner in the RealativeLayout, then set the pos of the Spinner as desired.
Something like this:
GridLayout:
cols: 2
rows: 2
pos_hint_x: {'right':.75}
Button:
id: button_top
text: 'Initial\n# of Boxes'
size_hint: None, None
size: 130,50
background_color: 'aquamarine'
background_normal: ''
color: 'black'
on_press: spin.is_open=True
Button:
text: 'Starting Color orange'
size_hint: None, None
size: 237,50
background_color: 'orange'
background_normal: ''
color: 'black'
RelativeLayout:
Spinner:
id: spin
background_color: 'aquamarine'
background_normal: ''
color: 'black'
text: '16'
size_hint: None,None
size: 120,48
top: button_top.y
values: '4','9','16','25','36','49','64','81','100','144','169','196','225','256'
on_text: print(self.text)
I think a better choice would be to use a different set of layouts.