[Paraview] pqPythonShell on local server & local client

clinton at elemtech.com clinton at elemtech.com
Fri Feb 15 11:31:48 EST 2008


I don't think you want to give your pqPythonShell the main window, unless 
you're using a QDialog, and pqPythonShell is not a QDialog.
Just pass in NULL as the parent of your pqPythonShell, or another QWidget you 
make yourself.

If you need the GUI Helper, you can do
vtkProcessModule::GetProcessModule()->GetGUIHelper();

Clint

On Friday 15 February 2008 4:18:09 am Alexander Wille wrote:
> Hello everyone,
>
> I am trying to make a toolbar button which will do exactly the same as
> clicking 'Tools->Python Shell->Run Script'. I have a local server running,
> with a local client process GUI attached to it. Into that GUI I load a
> plugin with my toolbar, which has a button for running python scripts. The
> problem arises when I try to tie a PythonShell (without a
> PythonShellDialog) to my server. The PythonShell-constructor needs a
> QWidget*, and I think I should supply it with a pointer at the MainWindow
> (but I don't know, documentation on this is slim). Pointers at MainWindows
> can be retrievied through ProcessModuleGUIHelpers, but I can only create a
> new ProcessModuleGUIHelper, not get the one in charge of my currently
> running GUI.
>
> I think the significant lines of code are these:
>
>   ProcessModuleGUIHelper* gui = ProcessModuleGUIHelper::New() //Problem:
> This creates a NEW ParaView-Process instead of connecting to the one that's
> currently running pqPythonShell* py = new
> pqPythonShell(gui->getMainWindow()); //I'd like to connect a new
> PythonShell to my process like this
>
>
> It is strange that a pqPythonShell needs a QWidget* for initialization;
> This contradicts the seperation of core functionality and GUI.
>
> Can anybode tell me how to properly attach a PythonShell to a (local)
> server?
>
>
> Thanks in advance,
> Alex
>
> P.S.: The entire source code for my toolbar is as follows:
>
> #ifndef __paToolbar_h
> #define __paToolbar_h
>
> #include
> #include
> #include
> #include
> #include
> #include "pqApplicationCore.h"
> #include "pqServerManagerModel.h"
> #include "pqServer.h"
> #include "ProcessModuleGUIHelper.h"
> #include "pqPythonShell.h"
>
> class paToolbar : public QActionGroup
> {
> Q_OBJECT
>
>  public:
> paToolbar(QObject* p) : QActionGroup(p)
>    {
>      // Using a Qt icon somehow depicting that there should be another icon
> there QIcon icon =
> qApp->style()->standardIcon(QStyle::SP_MessageBoxCritical); QAction* a =
> new QAction(icon, "Open & silently run a script in the python shell",
> this); this->addAction(a);
>      QObject::connect(this, SIGNAL(triggered(QAction*)), this,
> SLOT(onAction(QAction*))); }
>
> public slots:
> void onAction(QAction* a)
>    {
>      pqServerManagerModel* sm =
> pqApplicationCore::instance()->getServerManagerModel(); QList servers =
> sm->findItems();
>      if(servers.size()) // Now I could easly retrieve a pqServer*
>        {
> 	 ProcessModuleGUIHelper* gui = ProcessModuleGUIHelper::New()
> 	 QWidget* mwnd = gui->GetMainWindow();
> 	 a->setData(QFileDialog::getOpenFileName(mwnd, "Run script", "","Python
> Scripts (*.py)")); if(a->data())
> 	   {
> 	     pqPythonShell* py = new pqPythonShell(mwnd);
> 	     py->initializeInterpretor();
> 	     py->executeScript(a->data().toString());
> 	   }
>        }
>    }
> };
> #endif




More information about the ParaView mailing list