like Zylann said on their answer i used a texturerect for the icon
what i did was place the texturerect on top, then, since i'm using a custom theme override, i scaled the icon to be the correct size, and set its margin to be the button's style margin, this would make it always stay in the same place
code:
get_node("TextureRect").texture.set_size_override(Vector2(32,32)) # set size override, this works for imagetextures
get_node("TextureRect").rect_pivot_offset = Vector2(get_node("TextureRect").texture.get_size().x/2, get_node("TextureRect").texture.get_size().y/2) # set the pivot to be on the center
get_node("TextureRect").margin_bottom = get_stylebox("normal").margin_bottom
get_node("TextureRect").margin_top = get_stylebox("normal").margin_top
get_node("TextureRect").margin_left = get_stylebox("normal").margin_left
get_node("TextureRect").margin_right = get_stylebox("normal").margin_right