3 votos

Comprobar si el widget PYQT5 es visible en el plugin QGIS

Estoy intentando comprobar si mi widget ya está abierto/visible antes de mostrarlo (o antes de ejecutar esta función). Necesito comprobar esto porque en mi plugin de QGIS puede ocurrir que llame a esta función muchas veces. He probado isVisible() pero este código devuelve siempre falso. ¿Cómo hacer esta comprobación?

def run(self):
  self.dlg = Dialog()
  if self.dlg.isVisible():
    print("is visible")
    pass
  else:
    print("is not visible")
    self.dlg.show()

  # Run the dialog event loop
  result = self.dlg.exec_()

  # See if OK was pressed
  if result:
    #Do something

3voto

Jeremy White Puntos 381

Tenga en cuenta que está creando una nueva instancia de su clase de diálogo cada vez que el run() se llama al método La página web isVisible() siempre devuelve false porque lo llama en la nueva instancia de su diálogo antes de llamar a show() en ese objeto.

¿Por qué no declaras self.dlg como una variable de instancia en el __init__() método.

Por ejemplo:

class MyPlugin:

    def __init__(self, iface):
        self.iface = iface
        self.dlg = Dialog()

Entonces en su método run():

def run(self):
    if not self.dlg.isVisible():
        self.dlg.show()

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X