2013-08-15 5 views
1

У меня есть текст с паутиной Matplotlib, чтобы сообщить пользователю, что график приостановлен. Это отлично работает, но я не хочу, чтобы слово «приостановлено» отображалось при печати или сохранении.Скрыть Matplotlib Текст во время сохранения

figPausedText = fig.text(0.5, 0.5,'Paused', horizontalalignment='center', 
    verticalalignment='center', 
    transform=ax.transAxes, 
    alpha = 0.25, 
    size='x-large') 

Каков наилучший способ скрыть Приостановленный текст при сохранении/печати? Я рад set_text(''), если я могу привязываться ко всем командам сохранения и печати. Я особенно хочу убедиться, что он работает, когда пользователь нажимает на панель навигации NavigationToolbar2TkAgg.

ответ

1

Что-то вроде этого:

figPausedText = fig.text(...) 
def my_save(fig, * args, **kwargs): 
    figPausedText.set_visible(False) 
    fig.savefig(*args, **kwargs) 
    figPausedText.set_visible(True) 

Если вы хотите получить действительно умный, вы можете обезьяна пропатчить Figure объект:

import types 

figPausedText = fig.text(...) 
# make sure we have a copy of the origanal savefig 
old_save = matplotlib.figure.Figure.savefig 
# our new function which well hide and then re-show your text 
def my_save(fig, *args, **kwargs): 
    figPausedText.set_visible(False) 
    ret = old_save(fig, *args, **kwargs) 
    figPausedText.set_visible(True) 
    return ret 
# monkey patch just this instantiation 
fig.savefig = types.MethodType(my_save, fig) 

или, если вам это нужно, чтобы работать через панель инструментов

import types 

figPausedText = fig.text(...) 
# make sure we have a copy of the origanal print_figure 
old_print = fig.canvas.print_figure # this is a bound function 
# if we want to do this right it is backend dependent 
# our new function which well hide and then re-show your text 
def my_save(canvas, *args, **kwargs): 
    figPausedText.set_visible(False) 
    ret = old_print(*args, **kwargs) # we saved the bound function, so don't need canvas 
    figPausedText.set_visible(True) 
    return ret 
# monkey patch just this instantiation 
fig.canvas.print_figure = types.MethodType(my_save, fig.canvas) 
+0

Это выглядит хорошо, но, к сожалению, my_save не вызывается, когда NavigationToolbar2TkAgg сохраняет butto n. Как это работает с NavigationToolbar2TkAgg? Я попробовал варианты из [save documentation] (http://matplotlib.org/api/backend_bases_api.html#matplotlib.backend_bases.NavigationToolbar2.save_figure) –

+0

Затем патч обезьяны 'canvas.print_figure' вместо – tacaswell

+0

Также отредактируйте свой вопрос, чтобы указать что вы хотите, чтобы это работало через панель инструментов gui. – tacaswell

Смежные вопросы