Matplotlib: не может манипулировать графиком, пока скрипт ожидает `input ()` - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь получить пользовательский ввод через input(), после того, как пользователь манипулирует графиком, используя стандартные элементы управления масштабированием. Например. Пользователь играет с графиком, вычисляет желаемое значение X и вводит его в командной строке.

График может быть в отдельном окне (Spyder / Python) или в строке (в блокноте Юпитера).

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

Однако я не могу заставить график отображаться и реагировать, пока командная строка ожидает ввода данных пользователем. Я пробовал:

  • plot() оператор первый, input() оператор второй.
  • Spyder с Python 3.6 (я думаю), от источника через MacPorts (обновил Spyder, насколько я мог)
  • Spyder через Python 3.7 из пакета Anaconda ContinuumIO, в IPython
  • Блокнот Юпитера также от Анаконды
  • Многочисленные бэкэнды: macosx, qt и т. Д.
  • Блокнот %matplotlib, notebook, inline, qt и т. Д.
  • отдельные окна рисунков (Spyder & Python) и рядные фигуры (Jupyter Notebook)
  • fig.show( block=False ) и варианты этого, например. plt.show( block=False )
  • два разных MacBook (2017 и 2010 MacBook Pro)

Я получил фактическое обновление графика (ранее это было либо пустое место в блокноте, либо пустое отдельное окно с рисунком), добавив matplotlib.pyplot.pause(0.5) между plot() и input() заявления. Это был серьезный прогресс, но как только сценарий попадет в оператор input(), я получаю вращающийся шарик в окне рисунка (предотвращение масштабирования и т. Д.), Пока не выполню оператор input(), введя что-то, а затем сценарий завершится. В этот момент сюжет является интерактивным.

Кажется, консоль (и) Python не может обрабатывать более одного взаимодействия с пользователем одновременно? То есть. input() замораживает всю другую интерактивность пользователя?

Я искал SO, google и т. Д. Уже несколько дней и не понял этого! Идея состояла в том, чтобы использовать это как «быстрый и грязный» способ получения пользовательского ввода с графика, прежде чем выполнять теоретически более сложную задачу получения пользовательских кликов непосредственно с графика (который должен был бы привязываться к отображаемым данным, таким как данные). курсоры).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...