I guess the problem is that in your "updatePlotAdd", you are re-creating RadioButtons object but you did not assign event trigger to this new object.
How about making the private function "click_dim" as class member function and call that in updatePlotAdd?
def click_dim(self, dim):
print dim
if dim == "2D":
self.updatePlotAdd2d()
elif dim == "3D":
self.updatePlotAdd3d()
else:
self.updatePlotAdd4d()
And adding one line to updatePlotAdd:
def updatePlotAdd(self):
print "updatePlotAdd"
rax = plt.axes([0.01, 0.7, 0.08, 0.1], axisbg='grey')
self.radioDim = RadioButtons(rax, ("2D", "3D","> 3D"), active=self.add_dim-2)
self.radioDim.on_clicked(self.click_dim)
self.fig2.canvas.draw()
Of course the same goes to init too
self.radioDim.on_clicked(self.click_dim)
With these modifications, it seems to work as you expected in my console.