Мой сценарий здесь следующий: я использую виджет pyqt для отображения сплошного полноэкранного режима на втором дисплее и наблюдаю за этим отображением с помощью камеры, которая непрерывно захватывает изображения. Я делаю некоторую обработку с изображениями, и это те данные, которые меня интересуют. Это прекрасно работает, когда используется интерактивно с ipython и matplotlib с использованием бэкэнда qt4agg, например,
% ipython -pylab
# ... import PatternDisplay, starting camera
pd = PatternDisplay(); pd.show(); pd.showColor(r=255,g=255,b=255)
imshow(cam.current_image)
Теперь мне нужно подобное поведение в консольном скрипте: он должен отображать виджет PatternDisplay, захватывать изображение, затем менять цвет в PatternDisplay, делать новое изображение и т. Д.
Проблема теперь в том, что PatternDisplay никогда не обновляется / перерисовывается в моем скрипте, вероятно потому, что PyQt никогда не получает шанс запустить свою очередь событий. Мне не повезло, пытаясь переместить линейную рабочую часть моего скрипта в QThread, потому что я больше не могу общаться с виджетом PatternDisplay из другого потока. Я пытался повторить реализацию ipython / matplotlib, но я не до конца понял, это довольно сложно - он избегает запуска основного цикла QApplication посредством исправлений обезьян и каким-то образом перемещает QT в свой собственный поток. Затем он периодически проверяет с помощью QTimer, была ли введена новая команда пользователем.
Разве нет простого способа достичь того, что я хочу сделать? Я с радостью предоставлю больше информации, если это необходимо. Спасибо за любую помощь!