@@ -61,6 +61,9 @@ class FigureManager(cbook.EventEmitter):
61
61
canvas : `matplotlib.backend_bases.FigureCanvasBase`
62
62
The GUI element on which we draw.
63
63
64
+ figure : `matplotlib.figure.Figure`
65
+ The figure that holds the canvas
66
+
64
67
toolbar : `matplotlib.backend_bases.NavigationToolbar2`
65
68
The toolbar used for interacting with the figure.
66
69
@@ -79,14 +82,15 @@ def __init__(self, figure, num):
79
82
self .window = self ._backend .Window ('Figure %d' % num )
80
83
self .window .mpl_connect ('window_destroy_event' , self .destroy )
81
84
82
- self .canvas = self ._backend .FigureCanvas (figure , manager = self )
85
+ self ._figure = None
86
+ self ._set_figure (figure )
83
87
84
- w = int (self .canvas . figure .bbox .width )
85
- h = int (self .canvas . figure .bbox .height )
88
+ w = int (self .figure .bbox .width )
89
+ h = int (self .figure .bbox .height )
86
90
87
- self .window .add_element (self .canvas , True , 'center' )
91
+ self .window .add_element (self .figure . canvas , True , 'center' )
88
92
89
- self .toolmanager = ToolManager (self .canvas . figure )
93
+ self .toolmanager = ToolManager (self .figure )
90
94
self .toolbar = self ._get_toolbar ()
91
95
92
96
tools .add_tools_to_manager (self .toolmanager )
@@ -108,7 +112,20 @@ def notify_axes_change(fig):
108
112
'this will be called whenever the current axes is changed'
109
113
if self .toolmanager is None and self .toolbar is not None :
110
114
self .toolbar .update ()
111
- self .canvas .figure .add_axobserver (notify_axes_change )
115
+ self .figure .add_axobserver (notify_axes_change )
116
+
117
+ @property
118
+ def figure (self ):
119
+ return self ._figure
120
+
121
+ def _set_figure (self , figure ):
122
+ if not figure .canvas :
123
+ self ._backend .FigureCanvas (figure , manager = self )
124
+ self ._figure = figure
125
+
126
+ @property
127
+ def canvas (self ):
128
+ return self ._figure .canvas
112
129
113
130
def destroy (self , * args ):
114
131
"""Called to destroy this FigureManager.
@@ -120,7 +137,7 @@ def destroy(self, *args):
120
137
return
121
138
122
139
self ._destroying = True
123
- self .canvas .destroy ()
140
+ self .figure . canvas .destroy ()
124
141
if self .toolbar :
125
142
self .toolbar .destroy ()
126
143
self .window .destroy ()
0 commit comments