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)