symbian-qemu-0.9.1-12/python-2.6.1/Demo/tkinter/guido/electrons.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #! /usr/bin/env python
       
     2 
       
     3 # Simulate "electrons" migrating across the screen.
       
     4 # An optional bitmap file in can be in the background.
       
     5 #
       
     6 # Usage: electrons [n [bitmapfile]]
       
     7 #
       
     8 # n is the number of electrons to animate; default is 30.
       
     9 #
       
    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.
       
    13 
       
    14 from Tkinter import *
       
    15 import random
       
    16 
       
    17 
       
    18 # The graphical interface
       
    19 class Electrons:
       
    20 
       
    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'])
       
    28 
       
    29         # Add background bitmap
       
    30         if bitmap:
       
    31             self.bitmap = c.create_bitmap(width/2, height/2,
       
    32                                           bitmap=bitmap,
       
    33                                           foreground='blue')
       
    34 
       
    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()
       
    42 
       
    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()
       
    50 
       
    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
       
    61 
       
    62 
       
    63 # Main program
       
    64 def main():
       
    65     import sys, string
       
    66 
       
    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
       
    72 
       
    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
       
    81 
       
    82     # Create the graphical objects...
       
    83     h = Electrons(n, bitmap)
       
    84 
       
    85     # ...and run!
       
    86     h.run()
       
    87 
       
    88 
       
    89 # Call main when run as script
       
    90 if __name__ == '__main__':
       
    91     main()