Exemple #1
0
def get_iface():
    """
    Will return a mock QgisInterface object with some methods implemented in a generic way.

    You can further control its behavior
    by using the mock infrastructure. Refer to https://docs.python.org/3/library/unittest.mock.html
    for more details.

        Returns
        -------
        QgisInterface

        A mock QgisInterface
    """

    start_app()

    my_iface = mock.Mock(spec=QgisInterface)

    my_iface.mainWindow.return_value = QMainWindow()

    canvas = QgsMapCanvas(my_iface.mainWindow())
    canvas.resize(QSize(400, 400))

    my_iface.mapCanvas.return_value = canvas

    return my_iface
Exemple #2
0
def qgis_app():
    """Start a QGIS application and get the iface.
    Mostly inspired by
    https://github.com/qgis/QGIS/blob/release-2_18/python/testing/mocked.py
    The application is returned as first argument. The QgisInterface is
    returned as second argument.
    The parent can be accessed by iface.mainWindow()
    The canvas can be access by iface.mapCanvas()
    You can further control its behavior
    by using the mock infrastructure.
    Refer to https://docs.python.org/3/library/unittest.mock.html
    for more details.
    :return: The QGIS interface.
    :rtype: QgisInterface
    """
    from qgis.utils import iface
    if iface:
        # We are already in QGIS.
        # I don't know if I can get the current QApplication.
        # But I guess we shouldn't use it too much.
        return None, iface

    # We are not in QGIS, we need to start an app.
    application = start_app()

    my_iface = mock.Mock(spec=QgisInterface)
    my_iface.mainWindow.return_value = QMainWindow()

    canvas = QgsMapCanvas(my_iface.mainWindow())
    canvas.resize(QSize(400, 400))

    my_iface.mapCanvas.return_value = canvas

    return application, my_iface
Exemple #3
0
def make_iface_canvas():
    my_iface = mock.Mock(spec=QgisInterface)

    my_iface.mainWindow.return_value = QMainWindow()

    # canvas = QgsMapCanvas(my_iface.mainWindow())
    canvas = MyCanvas()
    canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326))
    canvas.setFrameStyle(0)
    canvas.resize(400, 400)
    my_iface.mapCanvas.return_value = canvas
    return my_iface
def make_iface_canvas(test_async):
    my_iface = mock.Mock(spec=QgisInterface)

    my_iface.mainWindow.return_value = QMainWindow()

    canvas = MyCanvas()
    canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326))
    canvas.setFrameStyle(0)
    canvas.resize(400, 400)
    canvas.closed.connect(test_async._stop_async)

    my_iface.mapCanvas.return_value = canvas
    return my_iface
Exemple #5
0
# QDockWidget split position "jumps" when QMainWindow resized
#
# Comment:
#
# When I encountered this bug it seemed that anything which sets QDockAreaLayoutItem::KeepSize
# avoided the error. This includes things like undocking and re-docking widgets.
#
# My own terribly hacky workaround was thus:
#
#     QByteArray temp = saveState();
#     restoreState(temp);
#
# since restoreState sets the flag.
#

    win = QMainWindow()
    temp = win.saveState()  # Añadido para evitar bug

    canvas = QgsMapCanvas()
    
    project = QgsProject.instance()
    root = project.layerTreeRoot()
    bridge = QgsLayerTreeMapCanvasBridge(root, canvas)

    win.setCentralWidget(canvas)
    
    boton = QPushButton('Botón de prueba')
    dw = QDockWidget("Dock Widget de prueba ", win)
    dw.setWidget(boton)
    win.addDockWidget(Qt.LeftDockWidgetArea, dw)
    
def qgis_app(request):
    """
    Creates a QGIS application, a QGIS Interface, a QGIS Settings and a set of loaded plugins. The fixture can be
    parametrized with the following options:
    - plugin_names: Plugin names to load
    - plugin_paths: Directories where the plugins are located
    - locale: Language code with the translation that the plugin has to be loaded

    :param request: Fixture request. It contains the indirect parameters for fixture setup
    :type request: FixtureRequest
    :return: The QGIS application objects
    :rtype: (QgsApplication, QgisInterface, QgsSettings, (list of object) or None)
    """
    # Collect parameters
    plugin_names = request.param[
        'plugin_names'] if 'plugin_names' in request.param else None
    plugin_paths = request.param['plugin_paths'] if 'plugin_paths' in request.param \
        else [str(Path(__file__).parent.parent.parent) + '/src']
    locale = request.param['locale'] if 'locale' in request.param else 'EN'
    # Create a QGIS Application
    # noinspection PyTypeChecker
    QgsApplication.setPrefixPath('/usr', True)
    qgs = QgsApplication([], True)
    qgs.initQgis()
    # Mock the QGIS Interface
    iface = unittest.mock.Mock(spec=QgisInterface)
    main_window = QMainWindow()
    iface.mainWindow.return_value = main_window
    canvas = QgsMapCanvas(main_window)
    canvas.resize(QSize(400, 400))
    iface.mapCanvas.return_value = canvas
    # Create the settings
    global_settings = QSettings()
    global_settings.setValue('locale/userLocale', locale)
    qgs_settings = QgsSettings()
    qgs_settings_file = qgs_settings.fileName()
    menu = QMenuBar()
    main_window.setMenuBar(menu)
    qgis.utils.iface = iface
    for plugin_path in plugin_paths:
        sys.path.insert(0, plugin_path)
        qgis.utils.plugin_paths.append(plugin_path)
    qgis.utils.updateAvailablePlugins()
    if plugin_names is not None:
        plugins = list()
        if isinstance(plugin_names, str):
            plugin_names = [plugin_names]
        for plugin_name in plugin_names:
            assert qgis.utils.loadPlugin(plugin_name)
            assert qgis.utils.startPlugin(plugin_name)
            plugins.append(qgis.utils.plugins[plugin_name])
        yield qgs, iface, qgs_settings, plugins
        for plugin_name in plugin_names:
            qgis.utils.unloadPlugin(plugin_name)
            del qgis.utils.plugin_times[plugin_name]
        if plugin_paths is not None:
            for plugin_path in plugin_paths:
                sys.path.remove(plugin_path)
                qgis.utils.plugin_paths.remove(plugin_path)
        qgis.utils.updateAvailablePlugins()
    else:
        yield qgs, iface, qgs_settings, None

    os.remove(qgs_settings_file)
    del qgs
Exemple #7
0
        bridge = QgsLayerTreeMapCanvasBridge(root, canvas)

        # llegim un projecte de demo
        project.read(projecteInicial)

        # Instanciem la classe QvUbicacions
        ubicacions = QvUbicacions(canvas)
        """
        Amb aquesta linia:
        ubicacions.show()
        es veuria el widget suelto, separat del canvas.

        Les següents línies mostren com integrar el widget 'ubicacions' com a dockWidget.
        """

        windowTest = QMainWindow()

        # Posem el canvas com a element central
        windowTest.setCentralWidget(canvas)

        # Creem un dockWdget i definim les característiques
        dwUbicacions = QDockWidget("Ubicacions", windowTest)
        dwUbicacions.setContextMenuPolicy(Qt.PreventContextMenu)
        dwUbicacions.setAllowedAreas(Qt.RightDockWidgetArea
                                     | Qt.LeftDockWidgetArea)
        dwUbicacions.setContentsMargins(1, 1, 1, 1)

        # Afegim el widget ubicacions al dockWidget
        dwUbicacions.setWidget(ubicacions)

        # Coloquem el dockWidget al costat esquerra de la finestra