Мне нужно сохранить неподвижные изображения некоторых рендеров pyvista из Jupyter. По какой-то причине при использовании «клиентского» бэкэнда jupyter, а не бэкэнда по умолчанию, изображения выглядят намного лучше, соблюдают аргументы непрозрачности соответствующим образом, гораздо быстрее реагируют на взаимодействие и т. д., поэтому я хотел бы сделать снимок экрана с изображениями, созданными с помощью этого бэкэнда. .
Однако, когда я пытаюсь сделать снимок экрана с изображениями, созданными с помощью этого бэкэнда, с помощьюploter.screenshot, я получаю следующую ошибку:
Код: Выделить всё
AttributeError: This plotter has not yet been set up and rendered with ``show()``. Consider setting ``off_screen=True`` for off screen rendering.
MRE, который выдает ту же ошибку:
Код: Выделить всё
import pyvista as pv
# Setup trame server proxy
pv.global_theme.trame.server_proxy_enabled = True
pv.global_theme.trame.server_proxy_prefix = "/proxy/"
# Initialize plotter
plotter = pv.Plotter(off_screen=True)
# Add a mesh
bunny = pv.examples.download_bunny()
plotter.add_mesh(bunny)
# Show
plotter.show(auto_close=False, jupyter_backend='client')
# Wait for it to render, then run this line
plotter.screenshot('screenshot_path.png')
Основная причина этой ошибки, по-видимому, заключается в том, что плоттер не осознает, что он уже был обработан при использовании этого бэкэнда, т.е.ploter._rendered возвращает False, даже когда я смотрю на визуализированном изображении на выходе ячейки Jupyter. Я могу делать снимки экрана ожидаемым образом при использовании бэкэнда по умолчанию; это происходит только с аргументом jupyter_backend='client'. Я также пробовал выполнять рендеринг с использованием бэкэнда по умолчанию, а затем в интерактивном режиме переключался на клиентский бэкэнд с помощью кнопки «Переключить режим рендеринга» в интерактивном окне, но при этом делался снимок экрана с изображением, созданным бэкэндом по умолчанию, а не клиентским бэкэндом. Является ли проблема с plotter._rendered ошибкой или известным поведением? В любом случае, есть ли обходной путь или есть ли другие аргументы, которые я должен передать либо инициализации Plotter, либо вызову show, которые могли бы обеспечить соответствующую синхронизацию состояния Plotter?
Подробнее здесь:
https://stackoverflow.com/questions/790 ... ow-using-t