Search code examples
qtpython-3.xpyotherside

Import Error after installing pyotherside


I tried installing pyotherside from the ubuntu repos (packages qml-module-io-thp-pyotherside and pyotherside) as well as from the git repo.

But in when importing it in Python3 I keep getting ImportError: No module named 'pyotherside'.

Any knows why? What is the path where I should find pyotherside installed?

OS: Ubuntu 16.04.2


Solution

  • PyOtherSide is a library that uses the python code from QML and not vice versa, in your project you must the qml file and the python file. To run the program you must execute the qml, for example:

    {your directory}
    ├── imageprovider.py
    └── imageprovider.qml
    

    imageprovider.py

    import pyotherside
    import math
    
    def render(image_id, requested_size):
        print('image_id: "{image_id}", size: {requested_size}'.format(**locals()))
    
        # width and height will be -1 if not set in QML
        if requested_size == (-1, -1):
            requested_size = (300, 300)
    
        width, height = requested_size
    
        # center for circle
        cx, cy = width/2, 10
    
        pixels = []
        for y in range(height):
            for x in range(width):
                pixels.extend(reversed([
                    255, # alpha
                    int(10 + 10 * ((x - y * 0.5) % 20)), # red
                    20 + 10 * (y % 20), # green
                    int(255 * abs(math.sin(0.3*math.sqrt((cx-x)**2 + (cy-y)**2)))) # blue
                ]))
        return bytearray(pixels), (width, height), pyotherside.format_argb32
    
    pyotherside.set_image_provider(render)
    

    imageprovider.qml

    import QtQuick 2.0
    import io.thp.pyotherside 1.5
    
    Image {
        id: image
        width: 300
        height: 300
    
        Python {
            Component.onCompleted: {
                // Add the directory of this .qml file to the search path
                addImportPath(Qt.resolvedUrl('.'));
    
                importModule('imageprovider', function () {
                    image.source = 'image://python/image-id-passed-from-qml';
                });
            }
    
            onError: console.log('Python error: ' + traceback)
        }
    }
    

    You open a terminal run:

    qmlscene {your directory}/imageprovider.qml