From e6d83597509d31f2e66c004821e77c96ec4466ec Mon Sep 17 00:00:00 2001
From: PrimozGodec
Date: Fri, 23 Sep 2016 08:10:21 +0200
Subject: [PATCH 1/2] Limited maximum content length of drop downs and report
functionality in interactive k-means
---
orangecontrib/educational/widgets/owkmeans.py | 15 ++++++++++++---
.../widgets/tests/test_owkmeans.py | 19 +++++++++++++++++++
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/orangecontrib/educational/widgets/owkmeans.py b/orangecontrib/educational/widgets/owkmeans.py
index 9e6b4eed..efc7f3e0 100644
--- a/orangecontrib/educational/widgets/owkmeans.py
+++ b/orangecontrib/educational/widgets/owkmeans.py
@@ -10,6 +10,7 @@
from Orange.widgets.widget import OWWidget
from Orange.data import DiscreteVariable, ContinuousVariable, Table, Domain
from Orange.widgets import gui, settings, widget
+from Orange.canvas import report
from orangecontrib.educational.widgets.utils.kmeans import Kmeans
from orangecontrib.educational.widgets.utils.color_transform import \
@@ -172,12 +173,11 @@ def __init__(self):
self.options_box = gui.widgetBox(self.controlArea, "Data")
opts = dict(
widget=self.options_box, master=self, orientation=Qt.Horizontal,
- callback=self.restart, sendSelectedValue=True)
+ callback=self.restart, sendSelectedValue=True,
+ maximumContentsLength=15)
policy = QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)
self.cbx = gui.comboBox(value='attr_x', label='X: ', **opts)
- self.cbx.setSizePolicy(policy)
self.cby = gui.comboBox(value='attr_y', label='Y: ', **opts)
- self.cby.setSizePolicy(policy)
self.centroids_box = gui.widgetBox(self.controlArea, "Centroids")
self.centroid_numbers_spinner = gui.spin(
@@ -575,3 +575,12 @@ def send_data(self):
centroids = Table(Domain(km.data.domain.attributes), km.centroids)
self.send("Annotated Data", annotated_data)
self.send("Centroids", centroids)
+
+ def send_report(self):
+ if self.data is None:
+ return
+ caption = report.render_items_vert((
+ ("Number of centroids:", self.number_of_clusters),
+ ))
+ self.report_plot(self.scatter)
+ self.report_caption(caption)
diff --git a/orangecontrib/educational/widgets/tests/test_owkmeans.py b/orangecontrib/educational/widgets/tests/test_owkmeans.py
index a9cb172b..85c19c14 100644
--- a/orangecontrib/educational/widgets/tests/test_owkmeans.py
+++ b/orangecontrib/educational/widgets/tests/test_owkmeans.py
@@ -304,3 +304,22 @@ def test_scatter_point_dropped(self):
self.assertEqual(self.widget.k_means.k, 1)
self.assertEqual(self.widget.k_means.centroids[0].tolist(), [1, 2])
+
+ def test_send_report(self):
+ """
+ Just test report not crashes
+ """
+ w = self.widget
+
+ w.set_data(self.data)
+ w.centroid_numbers_spinner.setValue(3)
+ self.process_events(lambda: w.scatter.svg())
+ w.report_button.click()
+
+ self.assertIn("Number of centroids", w.report_html)
+
+ # if no data
+ w.set_data(None)
+ w.report_button.click()
+
+ self.assertNotIn("Number of centroids", w.report_html)
From 66eef1967dffde529363c7df13db16f2489584a2 Mon Sep 17 00:00:00 2001
From: PrimozGodec
Date: Fri, 23 Sep 2016 11:13:15 +0200
Subject: [PATCH 2/2] Removed policy for spinner
---
orangecontrib/educational/widgets/owkmeans.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/orangecontrib/educational/widgets/owkmeans.py b/orangecontrib/educational/widgets/owkmeans.py
index efc7f3e0..5f6a5189 100644
--- a/orangecontrib/educational/widgets/owkmeans.py
+++ b/orangecontrib/educational/widgets/owkmeans.py
@@ -175,7 +175,7 @@ def __init__(self):
widget=self.options_box, master=self, orientation=Qt.Horizontal,
callback=self.restart, sendSelectedValue=True,
maximumContentsLength=15)
- policy = QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Fixed)
+
self.cbx = gui.comboBox(value='attr_x', label='X: ', **opts)
self.cby = gui.comboBox(value='attr_y', label='Y: ', **opts)
@@ -183,8 +183,7 @@ def __init__(self):
self.centroid_numbers_spinner = gui.spin(
self.centroids_box, self, 'number_of_clusters',
minv=1, maxv=10, step=1, label='Number of centroids:',
- alignment=Qt.AlignRight, callback=self.number_of_clusters_change,
- sizePolicy=policy)
+ alignment=Qt.AlignRight, callback=self.number_of_clusters_change)
self.restart_button = gui.button(
self.centroids_box, self, "Randomize Positions",
callback=self.restart)