Added text entry beside sliders
These automatically are updated when the slider moves, and vice versa. Still cannot seem to fix the adjustment increment. It makes no sense.
This commit is contained in:
		
					parent
					
						
							
								6db914caad
							
						
					
				
			
			
				commit
				
					
						9d98349805
					
				
			
		
					 2 changed files with 254 additions and 139 deletions
				
			
		|  | @ -10,6 +10,225 @@ | |||
|     <property name="page-increment">5</property> | ||||
|     <signal name="value-changed" handler="bigRadiusAdjustment_value_changed_cb" swapped="no"/> | ||||
|   </object> | ||||
|   <object class="GtkWindow" id="spWindow"> | ||||
|     <property name="can-focus">False</property> | ||||
|     <property name="title" translatable="yes">Spirographs</property> | ||||
|     <property name="window-position">center</property> | ||||
|     <property name="default-width">800</property> | ||||
|     <property name="default-height">800</property> | ||||
|     <signal name="destroy" handler="onDestroy" swapped="no"/> | ||||
|     <child> | ||||
|       <!-- n-columns=2 n-rows=3 --> | ||||
|       <object class="GtkGrid" id="topGrid"> | ||||
|         <property name="visible">True</property> | ||||
|         <property name="can-focus">False</property> | ||||
|         <property name="margin-start">5</property> | ||||
|         <property name="margin-end">5</property> | ||||
|         <property name="margin-top">5</property> | ||||
|         <property name="margin-bottom">5</property> | ||||
|         <property name="row-spacing">10</property> | ||||
|         <child> | ||||
|           <object class="GtkImage" id="epichondroidFormulaImage"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <property name="pixbuf">img/small_epitrochoid.png</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">0</property> | ||||
|             <property name="top-attach">2</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkImage" id="hypotrochoidFormulaImage"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <property name="pixbuf">img/small_hypotrochoid.png</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">1</property> | ||||
|             <property name="top-attach">2</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkViewport" id="plotViewport"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="app-paintable">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <property name="hscroll-policy">natural</property> | ||||
|             <property name="vscroll-policy">natural</property> | ||||
|             <child> | ||||
|               <placeholder/> | ||||
|             </child> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">0</property> | ||||
|             <property name="top-attach">0</property> | ||||
|             <property name="width">2</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <!-- n-columns=3 n-rows=3 --> | ||||
|           <object class="GtkGrid" id="scaleGrid"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <property name="margin-start">5</property> | ||||
|             <property name="margin-end">5</property> | ||||
|             <property name="row-spacing">5</property> | ||||
|             <property name="column-spacing">5</property> | ||||
|             <child> | ||||
|               <object class="GtkScale" id="bigRadiusScale"> | ||||
|                 <property name="visible">True</property> | ||||
|                 <property name="can-focus">True</property> | ||||
|                 <property name="hexpand">True</property> | ||||
|                 <property name="adjustment">bigRadiusAdjustment</property> | ||||
|                 <property name="show-fill-level">True</property> | ||||
|                 <property name="fill-level">100</property> | ||||
|                 <property name="round-digits">1</property> | ||||
|               </object> | ||||
|               <packing> | ||||
|                 <property name="left-attach">2</property> | ||||
|                 <property name="top-attach">0</property> | ||||
|               </packing> | ||||
|             </child> | ||||
|             <child> | ||||
|               <object class="GtkScale" id="distanceScale"> | ||||
|                 <property name="visible">True</property> | ||||
|                 <property name="can-focus">True</property> | ||||
|                 <property name="hexpand">True</property> | ||||
|                 <property name="adjustment">distanceAdjustment</property> | ||||
|                 <property name="show-fill-level">True</property> | ||||
|                 <property name="fill-level">100</property> | ||||
|                 <property name="round-digits">1</property> | ||||
|               </object> | ||||
|               <packing> | ||||
|                 <property name="left-attach">2</property> | ||||
|                 <property name="top-attach">2</property> | ||||
|               </packing> | ||||
|             </child> | ||||
|             <child> | ||||
|               <object class="GtkScale" id="smallRadiusScale"> | ||||
|                 <property name="visible">True</property> | ||||
|                 <property name="can-focus">True</property> | ||||
|                 <property name="hexpand">True</property> | ||||
|                 <property name="adjustment">smallRadiusAdjustment</property> | ||||
|                 <property name="show-fill-level">True</property> | ||||
|                 <property name="fill-level">100</property> | ||||
|                 <property name="round-digits">1</property> | ||||
|               </object> | ||||
|               <packing> | ||||
|                 <property name="left-attach">2</property> | ||||
|                 <property name="top-attach">1</property> | ||||
|               </packing> | ||||
|             </child> | ||||
|             <child> | ||||
|               <object class="GtkEntry" id="bigRadiusEntry"> | ||||
|                 <property name="visible">True</property> | ||||
|                 <property name="can-focus">True</property> | ||||
|                 <property name="halign">center</property> | ||||
|                 <property name="margin-start">10</property> | ||||
|                 <property name="margin-end">10</property> | ||||
|                 <property name="width-chars">10</property> | ||||
|                 <property name="text" translatable="yes">32</property> | ||||
|                 <property name="xalign">0.5</property> | ||||
|                 <property name="primary-icon-activatable">False</property> | ||||
|                 <property name="primary-icon-sensitive">False</property> | ||||
|                 <property name="input-purpose">number</property> | ||||
|                 <signal name="changed" handler="bigRadiusEntry_changed_cb" swapped="no"/> | ||||
|               </object> | ||||
|               <packing> | ||||
|                 <property name="left-attach">1</property> | ||||
|                 <property name="top-attach">0</property> | ||||
|               </packing> | ||||
|             </child> | ||||
|             <child> | ||||
|               <object class="GtkLabel" id="bigRadiusLabel"> | ||||
|                 <property name="width-request">100</property> | ||||
|                 <property name="visible">True</property> | ||||
|                 <property name="can-focus">False</property> | ||||
|                 <property name="halign">start</property> | ||||
|                 <property name="label" translatable="yes">Big Radius (R):</property> | ||||
|               </object> | ||||
|               <packing> | ||||
|                 <property name="left-attach">0</property> | ||||
|                 <property name="top-attach">0</property> | ||||
|               </packing> | ||||
|             </child> | ||||
|             <child> | ||||
|               <object class="GtkLabel" id="smallRadiusLabel"> | ||||
|                 <property name="width-request">100</property> | ||||
|                 <property name="visible">True</property> | ||||
|                 <property name="can-focus">False</property> | ||||
|                 <property name="halign">start</property> | ||||
|                 <property name="label" translatable="yes">Small Radius (r):</property> | ||||
|               </object> | ||||
|               <packing> | ||||
|                 <property name="left-attach">0</property> | ||||
|                 <property name="top-attach">1</property> | ||||
|               </packing> | ||||
|             </child> | ||||
|             <child> | ||||
|               <object class="GtkLabel" id="distanceLabel"> | ||||
|                 <property name="width-request">100</property> | ||||
|                 <property name="visible">True</property> | ||||
|                 <property name="can-focus">False</property> | ||||
|                 <property name="halign">start</property> | ||||
|                 <property name="label" translatable="yes">Distance (d):</property> | ||||
|               </object> | ||||
|               <packing> | ||||
|                 <property name="left-attach">0</property> | ||||
|                 <property name="top-attach">2</property> | ||||
|               </packing> | ||||
|             </child> | ||||
|             <child> | ||||
|               <object class="GtkEntry" id="smallRadiusEntry"> | ||||
|                 <property name="width-request">100</property> | ||||
|                 <property name="visible">True</property> | ||||
|                 <property name="can-focus">True</property> | ||||
|                 <property name="halign">center</property> | ||||
|                 <property name="margin-start">10</property> | ||||
|                 <property name="margin-end">10</property> | ||||
|                 <property name="width-chars">10</property> | ||||
|                 <property name="max-width-chars">5</property> | ||||
|                 <property name="text" translatable="yes">7</property> | ||||
|                 <property name="xalign">0.5</property> | ||||
|                 <property name="input-purpose">number</property> | ||||
|                 <signal name="changed" handler="smallRadiusEntry_changed_cb" swapped="no"/> | ||||
|               </object> | ||||
|               <packing> | ||||
|                 <property name="left-attach">1</property> | ||||
|                 <property name="top-attach">1</property> | ||||
|               </packing> | ||||
|             </child> | ||||
|             <child> | ||||
|               <object class="GtkEntry" id="distanceEntry"> | ||||
|                 <property name="width-request">100</property> | ||||
|                 <property name="visible">True</property> | ||||
|                 <property name="can-focus">True</property> | ||||
|                 <property name="halign">center</property> | ||||
|                 <property name="margin-start">10</property> | ||||
|                 <property name="margin-end">10</property> | ||||
|                 <property name="width-chars">10</property> | ||||
|                 <property name="max-width-chars">5</property> | ||||
|                 <property name="text" translatable="yes">5</property> | ||||
|                 <property name="xalign">0.5</property> | ||||
|                 <property name="input-purpose">number</property> | ||||
|                 <signal name="changed" handler="distanceEntry_changed_cb" swapped="no"/> | ||||
|               </object> | ||||
|               <packing> | ||||
|                 <property name="left-attach">1</property> | ||||
|                 <property name="top-attach">2</property> | ||||
|               </packing> | ||||
|             </child> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">0</property> | ||||
|             <property name="top-attach">1</property> | ||||
|             <property name="width">2</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|       </object> | ||||
|     </child> | ||||
|   </object> | ||||
|   <object class="GtkAdjustment" id="distanceAdjustment"> | ||||
|     <property name="lower">0.5</property> | ||||
|     <property name="upper">100</property> | ||||
|  | @ -26,129 +245,4 @@ | |||
|     <property name="page-increment">5</property> | ||||
|     <signal name="value-changed" handler="smallRadiusAdjustment_value_changed_cb" swapped="no"/> | ||||
|   </object> | ||||
|   <object class="GtkWindow" id="spWindow"> | ||||
|     <property name="can-focus">False</property> | ||||
|     <signal name="destroy" handler="onDestroy" swapped="no"/> | ||||
|     <child> | ||||
|       <!-- n-columns=2 n-rows=5 --> | ||||
|       <object class="GtkGrid" id="topGrid"> | ||||
|         <property name="visible">True</property> | ||||
|         <property name="can-focus">False</property> | ||||
|         <property name="row-spacing">10</property> | ||||
|         <property name="column-homogeneous">True</property> | ||||
|         <child> | ||||
|           <object class="GtkScale" id="bigRadiusScale"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">True</property> | ||||
|             <property name="adjustment">bigRadiusAdjustment</property> | ||||
|             <property name="show-fill-level">True</property> | ||||
|             <property name="fill-level">100</property> | ||||
|             <property name="round-digits">1</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">1</property> | ||||
|             <property name="top-attach">1</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkScale" id="smallRadiusScale"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">True</property> | ||||
|             <property name="adjustment">smallRadiusAdjustment</property> | ||||
|             <property name="show-fill-level">True</property> | ||||
|             <property name="fill-level">100</property> | ||||
|             <property name="round-digits">1</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">1</property> | ||||
|             <property name="top-attach">2</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkScale" id="distanceScale"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">True</property> | ||||
|             <property name="adjustment">distanceAdjustment</property> | ||||
|             <property name="show-fill-level">True</property> | ||||
|             <property name="fill-level">100</property> | ||||
|             <property name="round-digits">1</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">1</property> | ||||
|             <property name="top-attach">3</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkLabel" id="bigRadiusLabel"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <property name="label" translatable="yes">Big Radius (R):</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">0</property> | ||||
|             <property name="top-attach">1</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkLabel" id="smallRadiusLabel"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <property name="label" translatable="yes">Small Radius (r):</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">0</property> | ||||
|             <property name="top-attach">2</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkLabel" id="distanceLabel"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <property name="label" translatable="yes">Distance (d):</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">0</property> | ||||
|             <property name="top-attach">3</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkImage" id="epichondroidFormulaImage"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <property name="pixbuf">img/small_epitrochoid.png</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">0</property> | ||||
|             <property name="top-attach">4</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkImage" id="hypotrochoidFormulaImage"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <property name="pixbuf">img/small_hypotrochoid.png</property> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">1</property> | ||||
|             <property name="top-attach">4</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|         <child> | ||||
|           <object class="GtkViewport" id="plotViewport"> | ||||
|             <property name="visible">True</property> | ||||
|             <property name="app-paintable">True</property> | ||||
|             <property name="can-focus">False</property> | ||||
|             <child> | ||||
|               <placeholder/> | ||||
|             </child> | ||||
|           </object> | ||||
|           <packing> | ||||
|             <property name="left-attach">0</property> | ||||
|             <property name="top-attach">0</property> | ||||
|             <property name="width">2</property> | ||||
|           </packing> | ||||
|         </child> | ||||
|       </object> | ||||
|     </child> | ||||
|   </object> | ||||
| </interface> | ||||
|  |  | |||
|  | @ -25,17 +25,23 @@ class spirographs: | |||
|         self.highestTheta = (np.lcm(self.smallRadius, self.bigRadius)/self.bigRadius) * 2 * math.pi | ||||
|         self.stepSize = self.highestTheta / 4096 | ||||
|         # update initial slider positions | ||||
|         bigRadiusAdjustment = builder.get_object('bigRadiusAdjustment') | ||||
|         smallRadiusAdjustment = builder.get_object('smallRadiusAdjustment') | ||||
|         distanceAdjustment = builder.get_object('distanceAdjustment') | ||||
|         self.bigRadiusAdjustment = builder.get_object('bigRadiusAdjustment') | ||||
|         self.smallRadiusAdjustment = builder.get_object('smallRadiusAdjustment') | ||||
|         self.distanceAdjustment = builder.get_object('distanceAdjustment') | ||||
|         self.bigRadiusEntry = builder.get_object('bigRadiusEntry') | ||||
|         self.smallRadiusEntry = builder.get_object('smallRadiusEntry') | ||||
|         self.distanceEntry = builder.get_object('distanceEntry') | ||||
|         # set the initial values to a neat shape | ||||
|         bigRadiusAdjustment.set_value(self.bigRadius) | ||||
|         smallRadiusAdjustment.set_value(self.smallRadius) | ||||
|         distanceAdjustment.set_value(self.distance) | ||||
|         self.bigRadiusAdjustment.set_value(self.bigRadius) | ||||
|         self.smallRadiusAdjustment.set_value(self.smallRadius) | ||||
|         self.distanceAdjustment.set_value(self.distance) | ||||
|         self.bigRadiusEntry.set_text(str(self.bigRadius)) | ||||
|         self.smallRadiusEntry.set_text(str(self.smallRadius)) | ||||
|         self.distanceEntry.set_text(str(self.distance)) | ||||
|         # try and set the step size?! | ||||
|         bigRadiusAdjustment.set_step_increment(0.5) | ||||
|         smallRadiusAdjustment.set_step_increment(0.5) | ||||
|         distanceAdjustment.set_step_increment(0.5) | ||||
|         self.bigRadiusAdjustment.set_step_increment(0.5) | ||||
|         self.smallRadiusAdjustment.set_step_increment(0.5) | ||||
|         self.distanceAdjustment.set_step_increment(0.5) | ||||
|         # create initial plot | ||||
|         self.recalcPoints() | ||||
|         self.showPlot() | ||||
|  | @ -58,19 +64,34 @@ class spirographs: | |||
| 
 | ||||
|     def bigRadiusAdjustment_value_changed_cb(self, widget): | ||||
|         self.bigRadius = widget.get_value() | ||||
|         self.bigRadiusEntry.set_text(str(self.bigRadius)) | ||||
|         self.recalcPoints() | ||||
|         self.updatePlot() | ||||
| 
 | ||||
|     def bigRadiusEntry_changed_cb(self, widget): | ||||
|         self.bigRadius = float(widget.get_text()) | ||||
|         self.bigRadiusAdjustment.set_value(self.bigRadius) | ||||
| 
 | ||||
|     def smallRadiusAdjustment_value_changed_cb(self, widget): | ||||
|         self.smallRadius = widget.get_value() | ||||
|         self.smallRadiusEntry.set_text(str(self.smallRadius)) | ||||
|         self.recalcPoints() | ||||
|         self.updatePlot() | ||||
| 
 | ||||
|     def smallRadiusEntry_changed_cb(self, widget): | ||||
|         self.smallRadius = float(widget.get_text()) | ||||
|         self.smallRadiusAdjustment.set_value(self.smallRadius) | ||||
| 
 | ||||
|     def distanceAdjustment_value_changed_cb(self, widget): | ||||
|         self.distance = widget.get_value() | ||||
|         self.distanceEntry.set_text(str(self.distance)) | ||||
|         self.recalcPoints() | ||||
|         self.updatePlot() | ||||
| 
 | ||||
|     def distanceEntry_changed_cb(self, widget): | ||||
|         self.distance = float(widget.get_text()) | ||||
|         self.distanceAdjustment.set_value(self.distance) | ||||
| 
 | ||||
|     def recalcPoints(self): | ||||
|         self.epiX = np.array([self.calcEpiX(i) for i in np.arange(0, self.highestTheta, self.stepSize)]) | ||||
|         self.epiY = np.array([self.calcEpiY(i) for i in np.arange(0, self.highestTheta, self.stepSize)]) | ||||
|  | @ -79,11 +100,11 @@ class spirographs: | |||
| 
 | ||||
|     def showPlot(self): | ||||
|         viewport = builder.get_object('plotViewport') | ||||
|         self.plotFigure = Figure(figsize=(5, 5), dpi=100) | ||||
|         self.plotFigure = Figure(figsize=(5, 8), dpi=100) | ||||
|         self.epiPlot, self.hypoPlot = self.plotFigure.subplots(1, 2) | ||||
|         self.epiPlot.set_title(f"Epichondroid of {self.bigRadius}, {self.smallRadius}, {self.distance}") | ||||
|         self.epiPlot.set_title(f"Epitrochoid of {self.bigRadius}, {self.smallRadius}, {self.distance}") | ||||
|         self.epiPlot.plot(self.epiX, self.epiY) | ||||
|         self.hypoPlot.set_title(f"Hypochondroid of {self.bigRadius}, {self.smallRadius}, {self.distance}") | ||||
|         self.hypoPlot.set_title(f"Hypotrochoid of {self.bigRadius}, {self.smallRadius}, {self.distance}") | ||||
|         self.hypoPlot.plot(self.hypoX, self.hypoY) | ||||
| 
 | ||||
|         self.canvas = FigureCanvas(self.plotFigure) | ||||
|  | @ -93,8 +114,8 @@ class spirographs: | |||
|     def updatePlot(self): | ||||
|         self.epiPlot.clear() | ||||
|         self.hypoPlot.clear() | ||||
|         self.epiPlot.set_title(f"Epichondroid of {self.bigRadius}, {self.smallRadius}, {self.distance}") | ||||
|         self.hypoPlot.set_title(f"Hypochondroid of {self.bigRadius}, {self.smallRadius}, {self.distance}") | ||||
|         self.epiPlot.set_title(f"Epitrochoid of {self.bigRadius}, {self.smallRadius}, {self.distance}") | ||||
|         self.hypoPlot.set_title(f"Hypotrochoid of {self.bigRadius}, {self.smallRadius}, {self.distance}") | ||||
|         self.epiPlot.plot(self.epiX, self.epiY) | ||||
|         self.hypoPlot.plot(self.hypoX, self.hypoY) | ||||
|         self.canvas.draw_idle() | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue