РЕДАКТИРОВАТЬ:
Бах, наконец, нашел обсуждение ошибки времени выполнения, хотя она сосредоточена на использовании PythonWin, который я не устанавливал в то время.После установки PythonWin и настройки GTK (согласно более раннему вопросу ) я все еще сталкивался с ошибкой.Решением здесь для обсуждения было добавить plt.close () после цикла for.Кажется, это работает.
Однако:
Из командной строки окно все еще не перемещается во время печати.При выходе PyEval_RestoreThread больше не сталкивается с NULL tstate.Было бы неплохо разрешить перемещать окно во время печати.
Исходное сообщение:
Примечание. Все описанные проблемы возникают при запуске из командной строки.Подобные причуды встречаются при запуске из оболочки IDLE (-n), как отмечено в разделе «Дополнительная, возможно, несущественная информация».
Мой код правильно строит линию, и сразу после построения я получаю:
"Неустранимая ошибка Python: PyEval_RestoreThread: NULL tstate
Это приложение запросило среду выполнения завершить еенеобычным способом. Пожалуйста, обратитесь в службу поддержки приложения для получения дополнительной информации. "
Код выглядит следующим образом:
import matplotlib as mpl
mpl.use("TKAgg")
import pylab as plt
import numpy as np
Line = mpl.lines.Line2D
x = np.linspace(-1,1,50)
y=np.sin(x*np.pi)
plt.ion()
fig = plt.gcf()
ax = fig.gca()
ax.add_line(Line([x],[y]))
plt.draw()
Код хорош при комментировании plt.ion (), но тогда ничего не отображается.
Хотя plt.show () будет работать в этом примере, цель состоит в том, чтобы использовать интерактив для создания грубой анимации с помощью следующего:
import matplotlib as mpl
mpl.use("TKAgg")
import pylab as plt
import numpy as np
plt.ion()
Line = mpl.lines.Line2D
x = np.linspace(-1,1,50)
for i in xrange(10):
y = (1.0+i/9.0) * np.sin(x*np.pi)
plt.clf()
fig = plt.gcf()
ax = fig.gca()
ax.add_line(Line([x],[y]))
plt.draw()
Каждая итерация правильно отображаетсоответствующая строка и любой код после цикла, выполняемого до фатальной ошибки, что можно продемонстрировать, добавив следующее сразу после цикла for:
raw_input("no error yet: ")
print "here it comes"
Я понимаю, что уничтожение фигуры и создание новойфигура и новые оси не могут быть эффективными или даже хорошей практикой.Тем не менее, проблема все еще, кажется, связана с plt.ion (), так как ее комментирование не приводит к ошибкам.
Если решение хорошо документировано, и я пропустил его в своих поисках, пожалуйста, смело указывайте на это и, возможно, предоставьте ссылку на него.Это было бы намного предпочтительнее, если альтернатива столкнулась с новой проблемой.
Если ответ заключается в том, чтобы управлять графикой более напрямую, чем при использовании pylab, я более чем готов изучить эту опцию.
Дополнительная, возможно, не относящаяся к делу информация:
- Когда не используется raw_input () после цикла for, окно не перемещается при выполнении второго кода.
- Если используется raw_input (), окно можно перемещать после построения графика, пока программа ожидает raw_input ()
- Проблема одинакова при запуске из оболочки IDLE (-no подпроцесс):
- Окно не может быть перемещено при построении, но не встречается фатальная ошибка.
- Окно можетперемещаться после построения графика, даже без использования raw_input ()
- Из командной строки или оболочки IDLE каждый график отображается правильно, пока окно неподвижно
Спасибозаранее за любые предложения / советы.