summaryrefslogtreecommitdiffstats
path: root/Lib/stdwin/Histogram.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1990-10-25 18:51:42 (GMT)
committerGuido van Rossum <guido@python.org>1990-10-25 18:51:42 (GMT)
commite1f069ec9831c263ddbf6fd5b997a115212f9262 (patch)
tree81a4f93ee6d5483c5002767136dcd2c84ed2875f /Lib/stdwin/Histogram.py
parent4de12876a9b41fa0c701f91191d1a588b69fcaf9 (diff)
downloadcpython-e1f069ec9831c263ddbf6fd5b997a115212f9262.zip
cpython-e1f069ec9831c263ddbf6fd5b997a115212f9262.tar.gz
cpython-e1f069ec9831c263ddbf6fd5b997a115212f9262.tar.bz2
Initial revision
Diffstat (limited to 'Lib/stdwin/Histogram.py')
-rwxr-xr-xLib/stdwin/Histogram.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/Lib/stdwin/Histogram.py b/Lib/stdwin/Histogram.py
new file mode 100755
index 0000000..a023938
--- /dev/null
+++ b/Lib/stdwin/Histogram.py
@@ -0,0 +1,49 @@
+# Module 'Histogram'
+
+from Buttons import *
+
+
+# A Histogram displays a histogram of numeric data.
+# It reacts to resize events by resizing itself,
+# leaving the same amount of space around the borders.
+#
+class HistogramAppearance() = LabelAppearance():
+ #
+ def define(self, (win, bounds, ydata, scale)):
+ self.init_appearance(win, bounds)
+ self.ydata = ydata
+ self.scale = scale # (min, max)
+ self.left_top, (right, bottom) = bounds
+ width, height = win.getwinsize()
+ self.right_margin = width - right
+ self.bottom_margin = height - bottom
+ return self
+ #
+ def setdata(self, (ydata, scale)):
+ self.ydata = ydata
+ self.scale = scale # (min, max)
+ self.win.change(self.bounds)
+ #
+ def drawit(self, d):
+ ydata = self.ydata
+ (left, top), (right, bottom) = self.bounds
+ min, max = self.scale
+ size = max-min
+ width, height = right-left, bottom-top
+ for i in range(len(ydata)):
+ h0 = left + i * width/len(ydata)
+ h1 = left + (i+1) * width/len(ydata)
+ v0 = top + height - (self.ydata[i]-min)*height/size
+ v1 = top + height
+ d.paint((h0, v0), (h1, v1))
+ #
+ def resize(self):
+ width, height = self.win.getwinsize()
+ right = width - self.right_margin
+ bottom = height - self.bottom_margin
+ self.setbounds(self.left_top, (right, bottom))
+ #
+
+class HistogramReactivity() = NoReactivity(): pass
+
+class Histogram() = HistogramAppearance(), HistogramReactivity(): pass