3

I have written a few QGIS plugins based on dockwidget (Spectre Viewer and Stripchart viewer). When opened, the plugin window is expected to stay open and react to interactions with opened layers. This works fine, but an annoyance is that when the plugin is installed and active, its window will open as soon as I start QGIS. I do not want them to appear until I open the plugin from the menu or toolbar. How can I do this?

The problem seems to be the opposite of QGIS plugins open automatically when starting QGIS, but I cannot see how the answer to this could help me (I do not have any startup.py in my plugins)

Vince
20.5k16 gold badges49 silver badges65 bronze badges
asked Jun 4, 2022 at 17:12
3
  • This would probably require editing the plugin's python code manually, is that something you would do? Updates would revert this. Commented Jun 4, 2022 at 20:14
  • Do you mean that even if the dock widget was open when qgis is closed, you want it to automatically not be open the next time qgis is first started? Commented Jun 5, 2022 at 8:23
  • @BenW, yes. It does not make sense to have the plugin open before a project is opened, and it feels more natural to open it if I need it than to close it if I do not need it. Commented Jun 5, 2022 at 19:13

2 Answers 2

3

I made the following edits to your plugin's qgisSpectre.py file in my local installation which seem to have fixed the problem. You can make the same changes in your local installation to test, then update your plugin.

Move the line which creates the dialog instance from the initGui() method to the __init__() method and add the following lines like so:

self.dlg=qgisSpectreDockWidget(self.iface.mainWindow())
if self.dlg.isVisible():
 self.dlg.close()

enter image description here

Also in the __init__() method, change:

self.pluginIsActive = False

to:

self.pluginIsActive = None

Then set the self.pluginIsActive attribute to False in the initGui() method.

enter image description here

answered Jun 5, 2022 at 23:54
0

Now (November 2023, QGIS v 3.32) I noticed a similiar problem. A kind of "ghosty" dialog will show up after installation. That is the dialog without a background. Ben's solution did not help, but I noticed that after I had closed the widget once, it did not turn up again, so I just unconditionally close the widget in the init, so now the start of the init is

 self.iface = iface
 self.dlg=qgisSpectreDockWidget(self.iface.mainWindow())
 # stops it from showing up when starting QGIS
 #if self.dlg.isVisible():
 try: 
 self.dlg.close()
 except:
 print("Should not be open here")
 # It should not open when QGIS is started
 self.pluginIsActive = None

I wrapped the close() in a try except in case it fails out for some reason. As it probably already is closed, I just catch the exception without any further handling.

answered Nov 19, 2023 at 18:49

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.