@@ -1120,51 +1120,25 @@ def __init__(self, targetfig, toolfig):
1120
1120
1121
1121
self.targetfig = targetfig
1122
1122
toolfig.subplots_adjust(left=0.2, right=0.9)
1123
-
1124
- self.axleft = toolfig.add_subplot(711)
1125
- self.axleft.set_title('Click on slider to adjust subplot param')
1126
- self.axleft.set_navigate(False)
1127
-
1128
- self.sliderleft = Slider(self.axleft, 'left',
1129
- 0, 1, targetfig.subplotpars.left,
1130
- closedmax=False)
1131
- self.sliderleft.on_changed(self.funcleft)
1132
-
1133
- self.axbottom = toolfig.add_subplot(712)
1134
- self.axbottom.set_navigate(False)
1135
- self.sliderbottom = Slider(self.axbottom,
1136
- 'bottom', 0, 1,
1137
- targetfig.subplotpars.bottom,
1138
- closedmax=False)
1139
- self.sliderbottom.on_changed(self.funcbottom)
1140
-
1141
- self.axright = toolfig.add_subplot(713)
1142
- self.axright.set_navigate(False)
1143
- self.sliderright = Slider(self.axright, 'right', 0, 1,
1144
- targetfig.subplotpars.right,
1145
- closedmin=False)
1146
- self.sliderright.on_changed(self.funcright)
1147
-
1148
- self.axtop = toolfig.add_subplot(714)
1149
- self.axtop.set_navigate(False)
1150
- self.slidertop = Slider(self.axtop, 'top', 0, 1,
1151
- targetfig.subplotpars.top,
1152
- closedmin=False)
1153
- self.slidertop.on_changed(self.functop)
1154
-
1155
- self.axwspace = toolfig.add_subplot(715)
1156
- self.axwspace.set_navigate(False)
1157
- self.sliderwspace = Slider(self.axwspace, 'wspace',
1158
- 0, 1, targetfig.subplotpars.wspace,
1159
- closedmax=False)
1160
- self.sliderwspace.on_changed(self.funcwspace)
1161
-
1162
- self.axhspace = toolfig.add_subplot(716)
1163
- self.axhspace.set_navigate(False)
1164
- self.sliderhspace = Slider(self.axhspace, 'hspace',
1165
- 0, 1, targetfig.subplotpars.hspace,
1166
- closedmax=False)
1167
- self.sliderhspace.on_changed(self.funchspace)
1123
+ toolfig.suptitle("Click on slider to adjust subplot param")
1124
+
1125
+ self._sliders = []
1126
+ names = ["left", "bottom", "right", "top", "wspace", "hspace"]
1127
+ # The last subplot, removed below, keeps space for the "Reset" button.
1128
+ for name, ax in zip(names, toolfig.subplots(len(names) + 1)):
1129
+ ax.set_navigate(False)
1130
+ slider = Slider(ax, name,
1131
+ 0, 1, getattr(targetfig.subplotpars, name))
1132
+ slider.on_changed(self._on_slider_changed)
1133
+ self._sliders.append(slider)
1134
+ toolfig.axes[-1].remove()
1135
+ (self.sliderleft, self.sliderbottom, self.sliderright, self.slidertop,
1136
+ self.sliderwspace, self.sliderhspace) = self._sliders
1137
+ for slider in [self.sliderleft, self.sliderbottom,
1138
+ self.sliderwspace, self.sliderhspace]:
1139
+ slider.closedmax = False
1140
+ for slider in [self.sliderright, self.slidertop]:
1141
+ slider.closedmin = False
1168
1142
1169
1143
# constraints
1170
1144
self.sliderleft.slidermax = self.sliderright
@@ -1175,57 +1149,78 @@ def __init__(self, targetfig, toolfig):
1175
1149
bax = toolfig.add_axes([0.8, 0.05, 0.15, 0.075])
1176
1150
self.buttonreset = Button(bax, 'Reset')
1177
1151
1178
- sliders = (self.sliderleft, self.sliderbottom, self.sliderright,
1179
- self.slidertop, self.sliderwspace, self.sliderhspace,)
1180
-
1181
- def func(event):
1182
- with ExitStack() as stack:
1183
- # Temporarily disable drawing on self and self's sliders.
1184
- stack.enter_context(cbook._setattr_cm(self, drawon=False))
1185
- for slider in sliders:
1186
- stack.enter_context(
1187
- cbook._setattr_cm(slider, drawon=False))
1188
- # Reset the slider to the initial position.
1189
- for slider in sliders:
1190
- slider.reset()
1191
- # Draw the canvas.
1192
- if self.drawon:
1193
- toolfig.canvas.draw()
1194
- self.targetfig.canvas.draw()
1195
-
1196
- # during reset there can be a temporary invalid state
1197
- # depending on the order of the reset so we turn off
1198
- # validation for the resetting
1152
+ # During reset there can be a temporary invalid state depending on the
1153
+ # order of the reset so we turn off validation for the resetting
1199
1154
validate = toolfig.subplotpars.validate
1200
1155
toolfig.subplotpars.validate = False
1201
- self.buttonreset.on_clicked(func )
1156
+ self.buttonreset.on_clicked(self._on_reset )
1202
1157
toolfig.subplotpars.validate = validate
1203
1158
1159
+ def _on_slider_changed(self, _):
1160
+ self.targetfig.subplots_adjust(
1161
+ **{slider.label.get_text(): slider.val
1162
+ for slider in self._sliders})
1163
+ if self.drawon:
1164
+ self.targetfig.canvas.draw()
1165
+
1166
+ def _on_reset(self, event):
1167
+ with ExitStack() as stack:
1168
+ # Temporarily disable drawing on self and self's sliders.
1169
+ stack.enter_context(cbook._setattr_cm(self, drawon=False))
1170
+ for slider in self._sliders:
1171
+ stack.enter_context(cbook._setattr_cm(slider, drawon=False))
1172
+ # Reset the slider to the initial position.
1173
+ for slider in self._sliders:
1174
+ slider.reset()
1175
+ # Draw the canvas.
1176
+ if self.drawon:
1177
+ event.canvas.draw()
1178
+ self.targetfig.canvas.draw()
1179
+
1180
+ axleft = cbook.deprecated("3.3", name="axleft")(
1181
+ property(lambda self: self.sliderleft.ax))
1182
+ axright = cbook.deprecated("3.3", name="axright")(
1183
+ property(lambda self: self.sliderright.ax))
1184
+ axbottom = cbook.deprecated("3.3", name="axbottom")(
1185
+ property(lambda self: self.sliderbottom.ax))
1186
+ axtop = cbook.deprecated("3.3", name="axtop")(
1187
+ property(lambda self: self.slidertop.ax))
1188
+ axwspace = cbook.deprecated("3.3", name="axwspace")(
1189
+ property(lambda self: self.sliderwspace.ax))
1190
+ axhspace = cbook.deprecated("3.3", name="axhspace")(
1191
+ property(lambda self: self.sliderhspace.ax))
1192
+
1193
+ @cbook.deprecated("3.3")
1204
1194
def funcleft(self, val):
1205
1195
self.targetfig.subplots_adjust(left=val)
1206
1196
if self.drawon:
1207
1197
self.targetfig.canvas.draw()
1208
1198
1199
+ @cbook.deprecated("3.3")
1209
1200
def funcright(self, val):
1210
1201
self.targetfig.subplots_adjust(right=val)
1211
1202
if self.drawon:
1212
1203
self.targetfig.canvas.draw()
1213
1204
1205
+ @cbook.deprecated("3.3")
1214
1206
def funcbottom(self, val):
1215
1207
self.targetfig.subplots_adjust(bottom=val)
1216
1208
if self.drawon:
1217
1209
self.targetfig.canvas.draw()
1218
1210
1211
+ @cbook.deprecated("3.3")
1219
1212
def functop(self, val):
1220
1213
self.targetfig.subplots_adjust(top=val)
1221
1214
if self.drawon:
1222
1215
self.targetfig.canvas.draw()
1223
1216
1217
+ @cbook.deprecated("3.3")
1224
1218
def funcwspace(self, val):
1225
1219
self.targetfig.subplots_adjust(wspace=val)
1226
1220
if self.drawon:
1227
1221
self.targetfig.canvas.draw()
1228
1222
1223
+ @cbook.deprecated("3.3")
1229
1224
def funchspace(self, val):
1230
1225
self.targetfig.subplots_adjust(hspace=val)
1231
1226
if self.drawon:
0 commit comments