Graphical Python Programming part 2: Write Your Own Screensaver - page 2
See the complete program on page 4
Colors in PyGTK, you may remember from the last article, can be specified either as color names or as Red, Green and Blue hues between 0 and 65535. You can vary your red, green and blue shades gradually, just the same way you did with the line positions. First initialize them:
r = random.randint(0, 65535) g = random.randint(0, 65535) b = random.randint(0, 65535) colorjump = 2048
Then inside the loop:
r = clip(r + random.randint(-colorjump, colorjump), 0, 65535) g = clip(g + random.randint(-colorjump, colorjump), 0, 65535) b = clip(b + random.randint(-colorjump, colorjump), 0, 65535) xgc.set_rgb_fg_color(gtk.gdk.Color(r, g, b))
If I also increase the number of steps in the loop to 500, I get something that looks like Figure 4.
Not bad! But wouldn't it be more fun if it just kept running and changing colors forever, like a screensaver?
Other Stories on LinuxPlanet
That gets a little trickier. Up to now, all the work has been done in the program's expose handler. But while the expose handler is running, the program can't be doing anything else -- like watching for clicks on the Quit button. It might not even have time to draw the screen. So you can't put a long loop, let alone one that will run forever, in handle_expose.
What's the solution? It's called an idle handler.