lunes, 17 de diciembre de 2018

Cómo colocar un plugin "Always On Top" en QGIS 3

En versiones anteriores de QGIS el comportamiento por defecto era mantener el plugin "Always On Top" pero esta situación cambió en la versión 3 de QGIS. Para algunos plugins que se desarrollan puede ser indiferente este comportamiento. Sin embargo, para aquellos que dependen de obtener información mediante un click del ratón en el Map Canvas era tedioso mantenerlo "On Top" haciendo click en el QDialog del plugin minimizado en la barra inferior del escritorio cada vez que se producía el referido click.

Después de algún tiempo, descubrí que el comportamiento "Always On Top" se podía fijar con el menú contextual que aparecía después de hacer click con el botón izquierdo del ratón sobre el Dialog minimizado en la barra inferior del sistema; tal como se aprecia en la imagen inferior:


A partir de la respuesta en la pregunta siguiente de gis.stackexchange.com, traté de adaptarla a mi plugin con Python 3 y PyQt5 pero, a pesar de no obtener errores, el resultado no fue satisfactorio.

How to show QGIS plugin dialog always on top?

Finalmente, adaptando para PyQt5 la respuesta que se encuentra aquí y my plugin Get Pattern para investigar los métodos de QDialog que contienen 'setWindow':


se corrobora que el método buscado es 'setWindowFlags'. Añadiendo el módulo Qt y la instrucción correspondiente en el método __init__; tal como se visualiza a continuación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
.
.
.
from PyQt5.QtCore import Qt
.
.
.
    def __init__(self, iface):
.
.
.
        # Create the dialog (after translation) and keep reference
        self.dlg = WhereAmIDialog()
        self.dlg.setWindowFlags(Qt.WindowStaysOnTopHint)
.
.
.

se obtiene el resultado esperado una vez cargado el plugin. El QDialog no se "esconde" cada vez que se hace click en el Map Canvas para obtener las coordenadas del punto que corresponde al click del ratón; tal como se aprecia en la imagen siguiente.





No hay comentarios: