~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Demo/tkinter/guido/brownian2.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Brownian motion -- an example of a NON multi-threaded Tkinter program ;)
 
2
# By Michele Simoniato, inspired by brownian.py
 
3
 
 
4
from tkinter import *
 
5
import random
 
6
import sys
 
7
 
 
8
WIDTH = 400
 
9
HEIGHT = 300
 
10
SIGMA = 10
 
11
BUZZ = 2
 
12
RADIUS = 2
 
13
LAMBDA = 10
 
14
FILL = 'red'
 
15
 
 
16
stop = 0                                # Set when main loop exits
 
17
root = None                             # main window
 
18
 
 
19
def particle(canvas):                   # particle = iterator over the moves
 
20
    r = RADIUS
 
21
    x = random.gauss(WIDTH/2.0, SIGMA)
 
22
    y = random.gauss(HEIGHT/2.0, SIGMA)
 
23
    p = canvas.create_oval(x-r, y-r, x+r, y+r, fill=FILL)
 
24
    while not stop:
 
25
        dx = random.gauss(0, BUZZ)
 
26
        dy = random.gauss(0, BUZZ)
 
27
        try:
 
28
            canvas.move(p, dx, dy)
 
29
        except TclError:
 
30
            break
 
31
        else:
 
32
            yield None
 
33
 
 
34
def move(particle): # move the particle at random time
 
35
    particle.next()
 
36
    dt = random.expovariate(LAMBDA)
 
37
    root.after(int(dt*1000), move, particle)
 
38
 
 
39
def main():
 
40
    global root, stop
 
41
    root = Tk()
 
42
    canvas = Canvas(root, width=WIDTH, height=HEIGHT)
 
43
    canvas.pack(fill='both', expand=1)
 
44
    np = 30
 
45
    if sys.argv[1:]:
 
46
        np = int(sys.argv[1])
 
47
    for i in range(np):                  # start the dance
 
48
        move(particle(canvas))
 
49
    try:
 
50
        root.mainloop()
 
51
    finally:
 
52
        stop = 1
 
53
 
 
54
if __name__ == '__main__':
 
55
    main()