No sé si existe un método mejor para esta cuestión pero, he descubierto este procedimiento:
¿Cómo cerrar programáticamente un QMessagebox sin hacer clic en ok o X?
donde se implementó programáticamente un QMessageBox para cerrar automáticamente después de un tiempo determinado. He probado otros métodos (que implican tiempo biblioteca python) con su código pero era necesario un retraso equivalente a un QMessagebox para obtener un resultado satisfactorio.
He modificado ligeramente tu código (para adaptarlo a mi sistema) y la propuesta del enlace anterior para utilizar un QMessageBox sin botón OK.
El siguiente código:
class CustomMessageBox(QMessageBox):
def __init__(self, *__args):
QMessageBox.__init__(self)
self.timeout = 0
self.autoclose = False
self.currentTime = 0
def showEvent(self, QShowEvent):
self.currentTime = 0
if self.autoclose:
self.startTimer(1000)
def timerEvent(self, *args, **kwargs):
self.currentTime += 1
if self.currentTime >= self.timeout:
self.done(0)
@staticmethod
def showWithTimeout(timeoutSeconds,
message,
title,
icon = QMessageBox.Information,
buttons = QMessageBox.NoButton):
w = CustomMessageBox()
w.autoclose = True
w.timeout = timeoutSeconds
w.setText(message)
w.setWindowTitle(title)
w.setIcon(icon)
w.setStandardButtons(buttons)
w.exec_()
import processing
from PyQt4.QtGui import QMessageBox
layer = iface.activeLayer();
layer.setSelectedFeatures([])
count =layer.featureCount()
lstChalta = []
lstFeatures = processing.features(layer)
for elem in lstFeatures:
geom = elem.geometry()
attr = elem.attributes()
layer.setSelectedFeatures([elem.id()])
iface.mapCanvas().zoomToSelected( layer )
box = layer.boundingBoxOfSelected()
iface.mapCanvas().setExtent(box)
iface.mapCanvas().refresh()
cno= str(attr[layer.fieldNameIndex('cno')])
path = '/home/zeito/Desktop/folder/Test'+ str(cno) + '.png'
CustomMessageBox.showWithTimeout(.5,
'feature: ' + cno,
"Information",
icon = QMessageBox.Information)
iface.mapCanvas().saveAsImage(path)
se estaba ejecutando con una capa vectorial donde creé su campo 'cno'; como se puede observar en la siguiente imagen:
Tomé una captura de pantalla durante la ejecución automática de mi código (ver la siguiente imagen para la característica 3).
Después de ejecutar el código, la carpeta de destino tenía las imágenes png como esperaba.