Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 629e83d

Browse files
committed
reverted tkagg show, sigh
svn path=/trunk/matplotlib/; revision=820
1 parent 79bd9ca commit 629e83d

3 files changed

Lines changed: 52 additions & 9 deletions

File tree

TODO

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,4 +612,6 @@ ZeroDivisionError: SeparableTransformation::eval_scalars yin interval is zero; c
612612

613613
-- DONE agg rotation bug for angles > 180
614614

615-
-- mathtext color is wrong in PS
615+
-- DONE mathtext color is wrong in PS
616+
617+
-- reverse pie rotation

lib/matplotlib/axes.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,7 +1125,7 @@ def draw(self, renderer):
11251125

11261126
if len(self.images)==1:
11271127
im = self.images[0]
1128-
im.draw(renderer)
1128+
if im.get_visible(): im.draw(renderer)
11291129
elif len(self.images)>1:
11301130
# make a composite image blending alpha
11311131
# list of (_image.Image, ox, oy)
@@ -1134,7 +1134,7 @@ def draw(self, renderer):
11341134
raise ValueError('Composite images with different origins not supported')
11351135
else:
11361136
origin = self.images[0].origin
1137-
ims = [(im.make_image(renderer),0,0) for im in self.images]
1137+
ims = [(im.make_image(renderer),0,0) for im in self.images if im.get_visible()]
11381138

11391139

11401140
im = _image.from_images(self.bbox.height(), self.bbox.width(), ims)
@@ -1146,8 +1146,8 @@ def draw(self, renderer):
11461146

11471147

11481148
if self.axison:
1149-
self.xaxis.draw(renderer)
1150-
self.yaxis.draw(renderer)
1149+
if self.xaxis.get_visible(): self.xaxis.draw(renderer)
1150+
if self.yaxis.get_visible(): self.yaxis.draw(renderer)
11511151

11521152

11531153
artists = []
@@ -1156,24 +1156,24 @@ def draw(self, renderer):
11561156
artists.extend(self.lines)
11571157
artists.extend(self.texts)
11581158

1159-
dsu = [ (a.zorder, a) for a in artists]
1159+
dsu = [ (a.zorder, a) for a in artists if a.get_visible()]
11601160
dsu.sort()
11611161

11621162
for zorder, a in dsu:
11631163
a.draw(renderer)
11641164

1165-
self.title.draw(renderer)
1165+
if self.title.get_visible(): self.title.draw(renderer)
11661166
if 0: bbox_artist(self.title, renderer)
11671167
# optional artists
11681168
for a in self.artists:
11691169
a.draw(renderer)
11701170

11711171

11721172
if self.legend_ is not None:
1173-
self.legend_.draw(renderer)
1173+
if self.legend_.get_visible(): self.legend_.draw(renderer)
11741174

11751175
for table in self.tables:
1176-
table.draw(renderer)
1176+
if table.get_visible(): table.draw(renderer)
11771177

11781178
self.transData.thaw() # release the lazy objects
11791179
self.transAxes.thaw() # release the lazy objects

lib/matplotlib/backends/backend_tkagg.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,48 @@ def resize(self, event):
281281
width, height = event.width, event.height
282282
self.toolbar.configure(width=width) # , height=height)
283283

284+
284285
def show(self):
286+
"""
287+
this function doesn't segfault but causes the
288+
PyEval_RestoreThread: NULL state bug on win32
289+
"""
290+
291+
def destroy(*args):
292+
self.window = None
293+
Gcf.destroy(self._num)
294+
if not self._shown: self.window.bind("<Destroy>", destroy)
295+
296+
_focus = windowing.FocusManager()
297+
if not self._shown:
298+
self.window.deiconify()
299+
# anim.py requires this
300+
if sys.platform=='win32' : self.window.update()
301+
else: self.canvas.draw()
302+
self._shown = True
303+
304+
def _show(self):
305+
"""
306+
# this function segfaults on an interactive session in pylab
307+
308+
1 >>> plot([1,2,3])
309+
Out[1]: [<matplotlib.lines.Line2D instance at 0x418ed62c>]
310+
CLOSE WINDOW
311+
2 >>> plot([1,2,3])
312+
Segmentation fault
313+
314+
I now realize that any call to self.window.bind("<Destroy>", destroy)
315+
causes the PyEval_RestoreThread: NULL state bug if the mainloop is not started. Due to the placement of
316+
317+
if not self._shown: self.window.bind("<Destroy>", destroy)
318+
319+
after the setting of
320+
321+
self._shown = True
322+
323+
it is never called
324+
325+
"""
285326
_focus = windowing.FocusManager()
286327
if not self._shown:
287328
self.window.deiconify()

0 commit comments

Comments
 (0)