用 Python IDLE 控制 Paraview GUI

3
我正在尝试使用IDLE交互地控制Paraview。这将涉及从IDLE发送命令并在Paraview中观察到更改的发生。我不想使用Paraview内部的Python shell。
到目前为止,我已成功从IDLE导入了Paraview模块(simple、servermanager等),但发送的命令在Paraview中没有反应。例如:
>>> from paraview.simple import *
>>> cone = Cone()
>>> Show()
>>> Render()

确实会创建一个锥形。但是这个锥形会被输出到一个新的、独立的OpenGL窗口,并不是Paraview GUI。

是否可能使用IDLE交互地控制Paraview?如果可以,如何完成?谢谢。


IDLE有一个特殊功能,可以方便开发tkinter应用程序。对于其他任何事情,它并没有做任何特别的处理。对于纯交互式控制,你应该和在控制台中使用交互式Python一样好。(IDLE还增加了编写和快速运行保存脚本的能力。)我很困惑为什么你不想使用Paraview的控制台?他们削弱了它吗?否则,它应该和Python或IDLE的shell一样好。 - Terry Jan Reedy
我不想使用Paraview的控制台,因为Paraview只是我用Python同时控制的多个应用程序之一。将我的工作集中在Paraview的shell中并开始编写与Paraview无关的代码是没有意义的。基本上,我可能会从另一个应用程序的Python API中获取数据,使用numpy或matlab python引擎进行处理,然后仅将其输出以进行可视化/动画效果。请注意,Paraview只是整个过程中的一个小步骤。我不希望它接管我的工作,因为我的工作涉及其他应用程序。 - user32882
这很有道理,但是我不了解Paraview,无法进一步评论。看看能否找到专门的Paraview支持列表或类似的东西。 - Terry Jan Reedy
2个回答

5

您需要以多客户端/服务器模式运行paraview。 在终端中运行pvserver。

./bin/pvserver --multi-clients

在另一个终端中运行Paraview并连接到您的服务器。
./bin/paraview
File->Connect
AddServer -> Choose a name -> Configure -> Save
Connect

在第三个终端中运行pvpython(或您自己配置的Python)。
./bin/pvpython
>> from paraview.simple import *
>> Connect("localhost")
>> Cone()
>> Show()

首先,我认为应该将 Connect(localhost) 更改为 Connect("localhost"),以避免出现 NameError: name 'localhost' is not defined 错误。其次,在运行 Show() 时会返回一个错误 RuntimeError: Show() needs a proxy argument or that an active source is set. 此外,所有这些操作后打开的 ParaView 是无响应的。 - Foad S. Farimani
1
确实,您需要先创建一个源代码。我已经更新了我的答案。 - Mathieu Westphal
这是一个与paraview互动的好方法!我在想你是否可以将其添加到这份文档中。 - Foad S. Farimani
1
我认为这更与ParaView指南相关。 - Mathieu Westphal

0

我使用系统Python构建了Paraview,以便我可以使用ipython和其他软件包。我只需要将我的PYTHONPATH设置为指向Paraview Python站点软件包,并将LD_LIBRARY_PATH设置为指向Paraview lib目录。

export PYTHONPATH=/path/to/paraview/install/lib/python2.7/site-packages
export LD_LIBRARY_PATH=/path/to/paraview/install/lib

$ ipython 
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
Type "copyright", "credits" or "license" for more information.

IPython 5.5.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from paraview.simple import *

In [2]: Connect("localhost")
Out[2]: Connection (cs://localhost:11111) [2]

In [3]: Cone()
Out[3]: <paraview.servermanager.Cone at 0x7f30716cde10>

In [4]: Show()
Out[4]: <paraview.servermanager.GeometryRepresentation at 0x7f307167b210>

In [5]: GetSources()
Out[5]: {('Cone1', '8803'): <paraview.servermanager.Cone at 0x7f30716cde10>}

In [6]: GetActiveSource()
Out[6]: <paraview.servermanager.Cone at 0x7f30716cde10>

ipython paraview客户端生成的锥体渲染截图

我的paraview版本是从Ubuntu 18.04上的master构建的。

唯一的问题是python site-packages/paraview/modules目录中缺少__init__.py文件。

In [1]: from paraview.simple import *
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-cc11d49fb28b> in <module>()
----> 1 from paraview.simple import *

/home/dustin/repos/paraview_builds/master/install/lib/python2.7/site-packages/paraview/simple.py in <module>()
     39 
     40 import paraview
---> 41 from paraview import servermanager
     42 import paraview._backwardscompatibilityhelper
     43 

/home/dustin/repos/paraview_builds/master/install/lib/python2.7/site-packages/paraview/servermanager.py in <module>()
     54 from paraview import _backwardscompatibilityhelper as _bc
     55 
---> 56 from paraview.modules.vtkPVServerImplementationCore import *
     57 from paraview.modules.vtkPVClientServerCoreCore import *
     58 from paraview.modules.vtkPVServerManagerCore import *

ImportError: No module named modules.vtkPVServerImplementationCore

我通过在paraview/modules目录中创建一个__init__.py文件来解决了这个问题:
touch /path/to/paraview/install/lib/python2.7/site-packages/paraview/modules/__init__.py

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接