[QGIS-Developer] Replacing a dialogue with another at runtime with Python

Ricardo Filipe Soares Garcia da ricardo.garcia.silva at gmail.com
Tue Oct 3 07:48:01 PDT 2017


Hi Dennis

On Tue, Oct 3, 2017 at 3:21 PM, Denis Rouzaud <denis.rouzaud at gmail.com>
wrote:

> Hi Ricardo,
>
> Sorry to bother, but I think this kind of hack should be discouraged.
>


No bother at all :)

I am just playing around with some ideas for improving the WMS layer
support. The whole 'hijack QGIS native dialog' thing is just a sidetrack
that is not really my main goal. It just seemed like a wacky, fun idea to
try out. just to see if it is possible!




>
> This modifies QGIS behavior in a hidden way by replacing native dialogs.
> And as you pointed, there is probably no way of uninstalling your plugin
> properly. It will require QGIS to restart to work as expected, which is not
> that bad, but still.
>
> If you think current behavior is not optimal, I would suggest to either:
> * bring your improvements into master instead of a plugin
>


That might be the plan for the long run. For now I'm just having some fun
at lunch break ;)




> * create a dedicated button and menu entry in your plugin for your
> customized dialog
>
> With the latter option, I think it would be possible to add your menu
> entry and button in the layer menu and layer toolbar, respectively.
>


Yeah I am aware there is a proper way to do this, and this is not it. This
is just toying and poking at stuff to see what is possible.
On a more "serious" tone, I agree with you 100%. This is not something that
I'd be putting out there for the world to use.




>
> Just my two cents.
>
> Denis
>
>

Cheers



>
>
>
>
> Le mar. 3 oct. 2017 à 16:09, Ricardo Filipe Soares Garcia da <
> ricardo.garcia.silva at gmail.com> a écrit :
>
>> Hi all
>>
>> Answering my own question for posterity
>>
>> Turns out I can disconnect all slots from a signal by calling
>> `my_action.triggered.disconnect()` without any arguments. My goal of
>> replacing the native QGIS 'Add WMS/WMTS layer' dialogue with another one
>> can be achieved like this:
>>
>> ```python
>>
>> def my_handler():
>>     print("Hello")
>>
>> action = iface.actionAddWmsLayer()
>> action.triggered.disconnect()
>> action.triggered.connect(my_handler)
>> ```
>>
>> This leaves another problem to be solved: How to restore the native QGIS
>> dialogue when my would-be plugin is deactivated by the user. The following
>> seems to work on QGIS 2.18:
>>
>> ```
>> provider_registry = qgis.core.QgsProviderRegistry.instance()
>> add_wms_dialog = provider_registry.selectWidget("wms")
>> action.triggered.disconnect()
>> action.triggered.connect(add_wms_dialog.show)
>>
>> ```
>>
>> Best regards
>>
>>
>>
>> On Mon, Oct 2, 2017 at 12:41 PM, Ricardo Filipe Soares Garcia da <
>> ricardo.garcia.silva at gmail.com> wrote:
>>
>>> Hi all
>>>
>>> Is it possible to replace one of QGIS' dialogues with a custom one
>>> during runtime by using Python?
>>>
>>> My concrete goal is to replace the dialogue that shows when clicking the
>>> 'Add WMS/WMTS Layer' with something custom. I'd like to enhance the native
>>> QGIS dialogue with additional elements for selecting additional dimensions,
>>> like time or elevation.
>>>
>>> Can this be done?
>>>
>>> I'm thinking that I'd only have to replace whatever slot is currently
>>> defined on the `iface.actionAddWmsLayer()` action with a custom function
>>> that would load my UI instead. The problem is that I can't seem to find
>>> where a signal's connected slots are stored with Qt.
>>>
>>> Ideally there would be some introspection mechanism by which I'd be able
>>> to retrieve which slots are associated with the action's `triggered` signal
>>> - I can't seem to find it though. After knowing which slot(s) were
>>> connected to the action's signal, I would presumably be able to
>>> `disconnect()` them and then connect my own.
>>>
>>> By looking at Qt's docs I thought that the QMetaObject class might be
>>> the place to look, but I still cannot find anything that looks seems to
>>> hold the registry of a signal's connected slots.
>>>
>>> Thanks in advance :)
>>>
>>>
>>>
>>> --
>>> ___________________________ ___ __
>>> Ricardo Garcia Silva
>>>
>>
>>
>>
>> --
>> ___________________________ ___ __
>> Ricardo Garcia Silva
>> _______________________________________________
>> QGIS-Developer mailing list
>> QGIS-Developer at lists.osgeo.org
>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
>
>


-- 
___________________________ ___ __
Ricardo Garcia Silva
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20171003/3b33885c/attachment-0001.html>


More information about the QGIS-Developer mailing list