[QGIS-Developer] QgsPythonRunner in standalone app

VOLPES-EXT, Jacky Jacky.VOLPES-EXT at canal-de-provence.com
Wed Oct 16 06:03:26 PDT 2019


Hi (again) !

I figured out (after 2 days of research !) that in a standalone app, to be able to open a custom layer form when identifying a feature, I have to implement a specific QgsPythonRunner child class (code below).
And then I have to set the QgsPythonRunner.

The problem is that I can't get evalCommand() to work because the variable result is a C++ reference, and python can't deal with it, can it ?

Maybe there is a workaround I didn't think through, or there is a need to pass result as a return value ?


Thanks !
BR


class PythonRunnerStandalone(QgsPythonRunner):

    def __init__(self):
        super().__init__()

    def runCommand(self, command, messageOnError):
        try:
            exec(command, globals())
            return True
        except Exception as e:
            if messageOnError == "":
                print("Error with command:\n")
            else:
                print(messageOnError + "\n")
            print(command)
            print("Catched exception:\n", e)
            return False

    def evalCommand(self, command, result):
        try:
            result = eval(command)  # problem here
            return True
        except Exception as e:
            print("Error with command:\n")
            print(command)
            print("Catched exception:\n", e)
            return False

qgis.core.QgsPythonRunner.setInstance(PythonRunnerStandalone())


In QGIS source code qgis-latest/qgis-3.8.2/src/gui/qgsattributeform.cpp lines 1610-1625:

    QString numArgs;

    // Check for eval result
    if ( QgsPythonRunner::eval( QStringLiteral( "len(inspect.getargspec(%1)[0])" ).arg( initFunction ), numArgs ) )  // Here numArgs is passed as reference to my python implementation

[...]

      if ( numArgs == QLatin1String( "3" ) )   // always fails here


Jacky Volpes
HR Team pour la Société du Canal de Provence | 2SI - QGIS
Le Tholonet, CS70064
jacky.volpes-ext at canal-de-provence.com<mailto:jacky.volpes-ext at canal-de-provence.com>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20191016/0cff2a4d/attachment.html>


More information about the QGIS-Developer mailing list