[Paraview] python plugin custom dialog causes paraview to hang

pat marion pat.marion at kitware.com
Wed Jun 16 18:11:01 EDT 2010


Hi,

So at the very end of that email that you linked, I mentioned the problem
that paraview hangs when it encounters a runtime error, instead of reporting
the error.  I haven't had the chance to investigate the problem, but it's
really annoying!

Anyway, I think your problem is just a few typos... try adding:

from PyQt4.QtCore import *


at the top.  Also, you had commas instead of periods in two places:

foo,input1  --> foo.input1
self, acceptfoo  --> self.acceptfoo


I debugged the problems by running your script in regular python.  I
commented out the callback_wrapper and then just added:

import sys
app = QApplication(sys.argv)

before the main script begins.  Doing it this way made it easy to spot the
typos.


Pat


On Wed, Jun 16, 2010 at 5:14 PM, <m.c.wilkins at massey.ac.nz> wrote:

>
> Hi,
>
> I am writing a Python plugin, and I want to popup a custom dialog.
> For simple dialogs I have found:
>
>   import PyQt4.QtGui
>   l = PyQt4.QtGui.QInputDialog.getText(wid, 'Slice', 'Length')
>
> to work fine.  But I need more complicate dialogs.  I just can't get
> the signals/slots to work.  Yes I have read
>
>   http://paraview.markmail.org/message/6h767kpak5dcoqwt
>
> (thanks Pat), otherwise surely I would not have made it this far!
>
> Here is my plugin, and any time I uncomment either of the connect
> lines, paraview (built from git about a week ago) just hangs.  Without
> those lines, the dialog doesn't work of course; I can cancel it with
> the window decorator, but that is it.
>
> Thank you for any help, this is beyond me, just reading the definition
> of callback_wrapper makes my head hurt, I hope it doesn't hurt yours
> ;-)
>
> Matt
>
>
> from PyQt4.QtGui import *
>
> def callback_wrapper(func):
>   v = paraview.vtk.vtkObject()
>   def wrap(*args, **kwargs):
>      v._args = args
>      v._kwargs = kwargs
>      v.Modified()
>   def callback(o, e): func(*v._args, **v._kwargs)
>   v.AddObserver("ModifiedEvent", callback)
>   return wrap
>
> class MyDialog(QDialog):
>
>   def __init__(self, *args):
>      QDialog.__init__(self, *args)
>
>      buttonBox = QDialogButtonBox()
>      okButton = buttonBox.addButton(buttonBox.Ok)
>      cancelButton = buttonBox.addButton(buttonBox.Cancel)
>
>      label0 = QLabel("Foo", self)
>      self.le0 = le0 = QLineEdit(self)
>
>      label1 = QLabel("Bar", self)
>      self.le1 = le1 = QLineEdit(self)
>
>      # either of these lines cause paraview to lock up
>      #QObject.connect(okButton, SIGNAL("clicked()"), self, acceptfoo)
>      #QObject.connect(cancelButton, SIGNAL("clicked()"), self.rejectfoo)
>
>      layout = QGridLayout()
>      layout.addWidget(label0, 0, 0)
>      layout.addWidget(le0, 0, 1)
>      layout.addWidget(label1, 1, 0)
>      layout.addWidget(le1, 1, 1)
>      layout.addWidget(buttonBox, 2, 0, 1, 2)
>      self.setLayout(layout)
>
>   @callback_wrapper
>   def acceptfoo(self):
>      self.input0 = self.le0.text()
>      self.input1 = self.le1.text()
>      self.accept()
>
>   @callback_wrapper
>   def rejectfoo(self):
>      print "Doing reject"
>      self.reject()
>
>
> foo = MyDialog()
> if foo.exec_():
>   print "OK:", foo.input0, foo,input1
> else:
>   print "They cancelled"
>
>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the ParaView Wiki at:
> http://paraview.org/Wiki/ParaView
>
> Follow this link to subscribe/unsubscribe:
> http://www.paraview.org/mailman/listinfo/paraview
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20100616/52ee74d5/attachment.htm>


More information about the ParaView mailing list