Further refined section on logging to one file from multiple processes.
[python.git] / Demo / tkinter / guido / electrons.py
blobfdc558f88565ed015f67abb1ec3b04eb8cd5e77b
1 #! /usr/bin/env python
3 # Simulate "electrons" migrating across the screen.
4 # An optional bitmap file in can be in the background.
6 # Usage: electrons [n [bitmapfile]]
8 # n is the number of electrons to animate; default is 30.
10 # The bitmap file can be any X11 bitmap file (look in
11 # /usr/include/X11/bitmaps for samples); it is displayed as the
12 # background of the animation. Default is no bitmap.
14 from Tkinter import *
15 import random
18 # The graphical interface
19 class Electrons:
21 # Create our objects
22 def __init__(self, n, bitmap = None):
23 self.n = n
24 self.tk = tk = Tk()
25 self.canvas = c = Canvas(tk)
26 c.pack()
27 width, height = tk.getint(c['width']), tk.getint(c['height'])
29 # Add background bitmap
30 if bitmap:
31 self.bitmap = c.create_bitmap(width/2, height/2,
32 bitmap=bitmap,
33 foreground='blue')
35 self.pieces = []
36 x1, y1, x2, y2 = 10,70,14,74
37 for i in range(n):
38 p = c.create_oval(x1, y1, x2, y2, fill='red')
39 self.pieces.append(p)
40 y1, y2 = y1 +2, y2 + 2
41 self.tk.update()
43 def random_move(self, n):
44 c = self.canvas
45 for p in self.pieces:
46 x = random.choice(range(-2,4))
47 y = random.choice(range(-3,4))
48 c.move(p, x, y)
49 self.tk.update()
51 # Run -- allow 500 movemens
52 def run(self):
53 try:
54 for i in range(500):
55 self.random_move(self.n)
56 except TclError:
57 try:
58 self.tk.destroy()
59 except TclError:
60 pass
63 # Main program
64 def main():
65 import sys, string
67 # First argument is number of electrons, default 30
68 if sys.argv[1:]:
69 n = string.atoi(sys.argv[1])
70 else:
71 n = 30
73 # Second argument is bitmap file, default none
74 if sys.argv[2:]:
75 bitmap = sys.argv[2]
76 # Reverse meaning of leading '@' compared to Tk
77 if bitmap[0] == '@': bitmap = bitmap[1:]
78 else: bitmap = '@' + bitmap
79 else:
80 bitmap = None
82 # Create the graphical objects...
83 h = Electrons(n, bitmap)
85 # ...and run!
86 h.run()
89 # Call main when run as script
90 if __name__ == '__main__':
91 main()