5 votos

La señal de lo que hace el botón x en messageBar emmit o cómo deshacerse de él con PyQGIS?

Estoy creando plugin de QGIS y estoy informando al usuario sobre el progreso de la computación a través de QProgressBar, que se muestra en messageBar. He añadido botón Cancelar, que proporciona al usuario la posibilidad de la final de la computación (muestra QMessageBox con la pregunta si el usuario desea final de computación o no). Me gustaría implementar la misma funcionalidad como botón Cancelar botón x, que se crea automáticamente como parte de messageBar o borrar completamente, por lo que habrá sólo botón Cancelar.

¿Alguien tiene una idea de cómo deshacerse de los botones x, o lo que se emite la señal, cuando se hace clic? He encontrado una señal en QObject clase destruido, pero si he entendido bien a partir de la documentación, el proceso de destrucción de QObject no puede ser detenido de esta manera.

Para la ilustración, mi código es este:

def progressBar(self):
    """Initializing progress bar.
        """
    self.progressMessageBar = iface.messageBar().createMessage(u"Ground Radiation Monitoring:",u" Computing...")
    self.progress = QProgressBar()
    self.progress.setMaximum(100)
    self.progress.setAlignment(Qt.AlignLeft|Qt.AlignVCenter)

    self.cancelButton = QtGui.QPushButton()
    self.cancelButton.setText('Cancel')
    self.progressMessageBar.layout().addWidget(self.cancelButton)
    self.progressMessageBar.layout().addWidget(self.progress)
    self.iface.messageBar().pushWidget(self.progressMessageBar, iface.messageBar().INFO)

    self.cancelButton.clicked.connect(self.onCancelButton)

Y messageBar:

messageBar

1voto

Mue Puntos 2469

Que x es un QToolButton que podemos identificar desde la barra de mensajes ya que es la única QToolButton presente. Y en lugar de destruirlo, sólo podríamos ocultar:

def progressBar(self):
    """Initializing progress bar.
        """
    self.progressMessageBar = iface.messageBar().createMessage(u"Ground Radiation Monitoring:",u" Computing...")
    self.progress = QProgressBar()
    self.progress.setMaximum(100)
    self.progress.setAlignment(Qt.AlignLeft|Qt.AlignVCenter)

    self.cancelButton = QtGui.QPushButton()
    self.cancelButton.setText('Cancel')
    self.progressMessageBar.layout().addWidget(self.cancelButton)
    self.progressMessageBar.layout().addWidget(self.progress)

    # Let's give the messageBar() a name
    msgBar = self.iface.messageBar()
    msgBar.pushWidget(progressMessageBar, iface.messageBar().INFO)
    # Now we can find the x button which is the only QToolButton in the messageBar()
    # and hide it
    msgBar.findChildren(QToolButton)[0].setHidden(True)

    self.cancelButton.clicked.connect(self.onCancelButton)

Antes:

Before

Después de:

After

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