Guido van Rossum | e1f069e | 1990-10-25 18:51:42 +0000 | [diff] [blame] | 1 | # Module 'Histogram' |
| 2 | |
| 3 | from Buttons import * |
Guido van Rossum | e15607f | 1990-10-31 11:17:34 +0000 | [diff] [blame] | 4 | from Resize import Resize |
Guido van Rossum | e1f069e | 1990-10-25 18:51:42 +0000 | [diff] [blame] | 5 | |
| 6 | |
| 7 | # A Histogram displays a histogram of numeric data. |
| 8 | # It reacts to resize events by resizing itself, |
| 9 | # leaving the same amount of space around the borders. |
Guido van Rossum | e15607f | 1990-10-31 11:17:34 +0000 | [diff] [blame] | 10 | # (This is geometry management, and should really be implemented |
| 11 | # by a different group of classes, but for now this hack is OK.) |
Guido van Rossum | e1f069e | 1990-10-25 18:51:42 +0000 | [diff] [blame] | 12 | # |
Guido van Rossum | e15607f | 1990-10-31 11:17:34 +0000 | [diff] [blame] | 13 | class HistogramAppearance() = Resize(), LabelAppearance(): |
Guido van Rossum | e1f069e | 1990-10-25 18:51:42 +0000 | [diff] [blame] | 14 | # |
| 15 | def define(self, (win, bounds, ydata, scale)): |
| 16 | self.init_appearance(win, bounds) |
Guido van Rossum | e15607f | 1990-10-31 11:17:34 +0000 | [diff] [blame] | 17 | self.init_resize() |
Guido van Rossum | e1f069e | 1990-10-25 18:51:42 +0000 | [diff] [blame] | 18 | self.ydata = ydata |
| 19 | self.scale = scale # (min, max) |
Guido van Rossum | e1f069e | 1990-10-25 18:51:42 +0000 | [diff] [blame] | 20 | return self |
| 21 | # |
| 22 | def setdata(self, (ydata, scale)): |
| 23 | self.ydata = ydata |
| 24 | self.scale = scale # (min, max) |
| 25 | self.win.change(self.bounds) |
| 26 | # |
| 27 | def drawit(self, d): |
| 28 | ydata = self.ydata |
| 29 | (left, top), (right, bottom) = self.bounds |
| 30 | min, max = self.scale |
| 31 | size = max-min |
| 32 | width, height = right-left, bottom-top |
| 33 | for i in range(len(ydata)): |
| 34 | h0 = left + i * width/len(ydata) |
| 35 | h1 = left + (i+1) * width/len(ydata) |
| 36 | v0 = top + height - (self.ydata[i]-min)*height/size |
| 37 | v1 = top + height |
| 38 | d.paint((h0, v0), (h1, v1)) |
| 39 | # |
Guido van Rossum | e1f069e | 1990-10-25 18:51:42 +0000 | [diff] [blame] | 40 | |
Guido van Rossum | e15607f | 1990-10-31 11:17:34 +0000 | [diff] [blame] | 41 | class Histogram() = HistogramAppearance(), NoReactivity(): pass |