[QGIS-Developer] Popup window within Processing crashes QGIS
Nyall Dawson
nyall.dawson at gmail.com
Thu Aug 30 18:27:41 PDT 2018
On Thu, 30 Aug 2018 at 23:38, C Hamilton <adenaculture at gmail.com> wrote:
>
> I have an algorithm that during execution gathers information from the data and then pops up a window for the user to select what the user would like to do.
>
> Is this possible in the Processing framework? I have tried doing this in processAlgorithm and it crashes QGIS. Here is how I call the popup window.
No - this is not supported and goes against the very fundamental
design of Processing. Argggh! ;)
But seriously, Processing was designed with the intention that all
user choices are made up-front. This allows algorithms to be nicely
executed inside of models, without the model halting mid-way waiting
for user input. It also allows algorithms, scripts, models, etc to be
run from headless environments such as console scripts.
In this case, you're getting a crash because you're trying to create
GUI components from your algorithm which is being executed in a
background thread. This is a big no-no in Qt land, and usually results
in a crash.
Nyall
> fieldsDialog = SelectionDialog(self.tableFeatures)
> fieldsDialog.exec_()
> items = fieldsDialog.selected
>
> Here is the beginning of the SelectionDialong class.
>
> class SelectionDialog(QDialog, FIELDS_CLASS):
> def __init__(self, feat, parent=None):
> super(SelectionDialog, self).__init__(parent)
> self.setupUi(self)
>
> Prior to Processing I passed in iface.mainWindow() as the parent. Is there a proper parent in Processing to pass? Perhaps this is the reason it is crashing.
>
> class SelectionDialog(QDialog, FIELDS_CLASS):
> def __init__(self, iface, feat):
> super(SelectionDialog, self).__init__(iface.mainWindow())
> self.setupUi(self)
>
> Thanks,
>
> Calvin
More information about the QGIS-Developer
mailing list