(Answering old question because it still comes up on Google and it's a useful question; this answer applies at least to version 3.3.3).
Like Polygon2D.polygon, it seems that Polygon2D.uv returns a copy of the array, not a reference. So calling uv.resize or uv.append only modifies the copy, not the underlying array, and therefore has no effect.
To actually set it, you need to assign the array directly:
poly.uv = PoolVector2Array([
The other thing to watch out for is that the UV coordinates here are specified in PIXELS, not [0,1] as used in a shader. If not specified, they appear to default to the same value as the vertex coordinates themselves (i.e., Polygon2D.uv == Polygon2D.polygon).
(Unfortunately none of this seems to be documented).
One last thing: you may need to restart the editor to make a "tool" script work.