2015-06-08 3 views
2

Я успешно использовал pyplot для отображения тепловых карт. Сегодня, похоже, он перестает работать.pyplot: Закрытие окна show() не продолжается код

Моя проблема заключается в том, что настройка моего сюжета, а вызов метода show() показывает фигуру в окне, но когда я закрываю это окно (щелкнув по x вверху), мой код не продолжается, show() способ называется. Кажется, он держится на show().

matrix - это матрица numpy.

Это пример моего кода:

plt.pcolor(matrix, cmap=plt.cm.binary) 
plt.xlabel('xaxis', fontsize=20) 
plt.ylabel('yaxis', fontsize=20) 
plt.axis([0, matrix.shape[1], 0, matrix.shape[0]]) 
plt.colorbar() 
#This is where my code hangs... 
plt.show() 
#Closing the window manually does nothing. 
#And the close() method doesn't seem to do anything. 
plt.close() 

После того, как метод show() называется, и окно закрывается, мой процесс продолжает идти, и я должен вручную завершить его.

Кто-нибудь знает причину, по которой это происходит?

+1

Вы используете это в ipython? На какой ОС вы работаете? Вы что-то изменили в своем скрипте или обновили любые пакеты, которые могли бы вызвать проблему? Не могли бы вы предоставить более подробную информацию? – hitzg

ответ

1

Вы пробовали установку plt.ion() когда-то до plt.show(). Это должно установить интерактивный режим, и show не остановит выполнение вашего скрипта.

+0

Когда я добавляю 'plt.ion()' перед 'plt.show()', окно появляется ненадолго (достаточно долго, чтобы увидеть фигуру, на самом деле), а затем закрывается само по себе. – Kestrel

+0

@Kestrel Ну в этом случае он закрывается, потому что вы вызываете 'plt.close()'. – hitzg

+0

Это решение является обходным, но не ответом на вопрос, почему 'show' продолжает блокироваться после закрытия фигуры. – hitzg

0

потому что plt.show() является «блокирующей функцией», и код не возобновится, пока вы не закроете фигуру. он не будет даже получить plt.close(), прежде чем закрыть фигуру, как написано после plt.show()

1

Если вы используете Tkinter:

Я столкнулся с той же проблемой при использовании Tkinter (для выбора файла с данными для участков) в сочетании с пипотом. Я обнаружил, что, вызывая root.destroy на моем tkinter.Tk() объекте, закрытие окна, созданного plt.show(), позволяет моему коду продолжать, а не висит.

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/18638790) – Ctznkane525

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