miércoles, 6 de enero de 2021

Cómo desplegar un QProgressDialog object con PyQGIS 3

Los objetos del tipo QProgressDialog permiten mostrar en tiempo real el desarrollo de un proceso y observar si éste se está desarrollando con normalidad o se presenta algún tipo de "retraso" que amerita ser corregido. El código a continuación despliega una serie de tres QProgressDialog cuya visualización se hace siempre "On Top" y donde el método 'setWindowModality' está activado con Qt.WindowModal. Si ésto último no se realiza el despliegue de la QProgressDialog parece ejecutarse como si estuviese "congelada".

m = ""

bar = QProgressDialog(m, "Cancel", 0, 100)
import time

bar.setWindowModality(Qt.WindowModal)
bar.setWindowFlags(Qt.WindowStaysOnTopHint)

m = "Operation 1 in progress"
bar.setLabelText(m)

for i in range(101):
    time.sleep(0.05)
    bar.setValue(i)

m = "Operation 2 in progress"
bar.setLabelText(m)

for i in range(101):
    time.sleep(0.05)
    bar.setValue(i)

m = "Operation 3 in progress"
bar.setLabelText(m)

for i in range(101):
    time.sleep(0.05)
    bar.setValue(i)

Si se ejecuta el código anterior con la línea del método 'setWindowModality' comentada, el comportamiento observado para todas las QProgressDialog es similar al de la imagen siguiente.

Por otra parte, si descomentamos la línea referida con anterioridad el comportamiento, para la segunda de las QProgressDialog, es como se detalla en la imagen a continuación.

No hay comentarios: