I would redo this bit:
try:
point.add_neighbor(self.points[x_minus][y])
point.add_neighbor(self.points[x_minus][y_minus])
point.add_neighbor(self.points[x_minus][y_plus])
point.add_neighbor(self.points[x][y_minus])
point.add_neighbor(self.points[x][y_plus])
point.add_neighbor(self.points[x_plus][y_minus])
point.add_neighbor(self.points[x_plus][y])
point.add_neighbor(self.points[x_plus][y_plus])
except:
print point.x,point.y
print "x_plus",x_plus
print "x_minus",x_minus
print "y_plus",y_plus
print "y_minus",y_minus
sys.exit();
Firstly, I wouldn't do a try, except. That would hide any errors in the try block. I would also rewrite the add neighbours bit as a list comprehension
point.neighbours = [self.points[a][b] for a in xrange(x_minus,x_plus +1) for b in xrange(y_minus,y_plus+1) if (a != x) or (b != y)
You can probabably make this simpler by just setting the offsets from x and y, so instead of a, you have x + l, with l = [-1,0,1], although it might be tricky to work with the edges. If you want to wrap-around the edges, you might be able to simplify by using the modulus operator %. x % 3, for example, should end up in the range 0,1,2, although you'll have to check that for negative values of x.
This section:
#insert a glider.
if (
(y==11 and x==11)
or
(y==11 and x==12)
or
(y==11 and x==13)
or
(y==12 and x==11)
or
(y==13 and x==12)
): set_alive=1;
Would work better, if you just use the co-ordinates to set the points manually, rather than looping through all the points to find these 5 points. Similarly for the wall. I would also make the neighbours setting loop into a seperate loop from the wall, and the randomizing bit, so they'll be a few small loops, rather than one bit one, and thus they'll probably be easier to read.
A general comment, that applies to most of your loops. A for loop is generally easier to read than a while loop, for just looping over a range of numbers. Use "for a in xrange(1,10)" to loop a over 1..9, for example.