› Foros › PC › Software libre
def leerMenSinLeer(self):
print "Mensajes sin leer: " + str(len(self.menSinLeer))
for link in self.menSinLeer:
print "Mensaje -> " + str(link)
self.verMensaje(link)
def verMensaje(self, url):
""" Metodo para visitar un mensaje """
visitar = self.dominio + str(url)
self.logToConsole("Visitando mensaje: " + str(url))
self.visitarURL(visitar)
def visitarURL(self, url):
""" Metodo generico para visitar una URL cualquiera sin usar POST o GET """
manager = QNetworkAccessManager()
request = QNetworkRequest(QUrl(url))
self.ui.webView.load(QUrl(url))
self.logToConsole("Visitando: " + str(url))
print "visitando " + str(url)
QtCore.QObject.connect(self.ui.webView,QtCore.SIGNAL("loadFinished (bool)"), self.ejecutaSiguiente)
Envydia escribió:Según tengo he entendido después de haberme leído la documentación para lograr este funcionamiento debería reescribir el método de la señal loadFinished(bool) lo cual se hace de la siguiente forma:QtCore.QObject.connect(self.ui.webView,QtCore.SIGNAL("loadFinished (bool)"), self.ejecutaSiguiente)
Envydia escribió:def leerMenSinLeer(self):
print "Mensajes sin leer: " + str(len(self.menSinLeer))
for link in self.menSinLeer:
print "Mensaje -> " + str(link)
self.verMensaje(link)
JanKusanagi escribió:Envydia escribió:Según tengo he entendido después de haberme leído la documentación para lograr este funcionamiento debería reescribir el método de la señal loadFinished(bool) lo cual se hace de la siguiente forma:QtCore.QObject.connect(self.ui.webView,QtCore.SIGNAL("loadFinished (bool)"), self.ejecutaSiguiente)
No se muy bien como sera en PyQt, pero por similitudes con Qt "real" (c++), lo que estas haciendo es conectar una señal a un slot, no reimplementar nada.
Es decir, le estas diciendo que cuando el widget que has llamado webView emita la señal "loadFinished()", se ejecute la funcion ejecutaSiguiente, que por cierto, entiendo que deberia ser un SLOT()
Me temo que faltan demasiadas partes del codigo para acabar de entender... que se supone que hace la funcion ejecutaSiguiente?
Gooler escribió:Envydia escribió:def leerMenSinLeer(self):
print "Mensajes sin leer: " + str(len(self.menSinLeer))
for link in self.menSinLeer:
print "Mensaje -> " + str(link)
self.verMensaje(link)
Con ese for estás leyendo todos los mensajes sin leer uno tras otro sin esperar a que terminen de cargar y por eso en webView se te quedará la última url que tengas por leer.
Viendo un poco la documentación de PyQt veo que no es necesario definir un slot como comenta Jan, sino que puedes asignarle una función definida directamente, así que lo que tendrías que hacer es sólamente leer el primer mensaje sin leer, cuando este se haya cargado ejecutaSiguiente hace un pop de la lista de urls y carga la siguiente... ya nos contarás qué tal te va.
def verMensajesSinLeer(self):
if len(self.menSinLeer) > 0:
QtCore.QObject.connect(self.ui.webView.page(),QtCore.SIGNAL("loadFinished (bool)"), self.verMensajesSinLeer)
mensaje = self.menSinLeer.pop()
self.ui.webView.load( QUrl( self.dominio + mensaje ) )
print "visitando: " + self.dominio + mensaje
else:
QtCore.QObject.connect(self.ui.webView.page(),QtCore.SIGNAL("loadFinished (bool)"), self.loadFinished)
print "No hay mensajes para leer."
self.cerrarSesion()
def verMensajesSinLeer(self):
if len(self.menSinLeer) > 0:
QtCore.QObject.connect(self.ui.webView.page(),QtCore.SIGNAL("loadFinished (bool)"), self.verMensajesSinLeer)
mensaje = self.menSinLeer.pop()
self.ui.webView.load( QUrl( self.dominio + mensaje ) )
print "visitando: " + self.dominio + mensaje
else:
QtCore.QObject.connect(self.ui.webView.page(),QtCore.SIGNAL("loadFinished (bool)"), self.loadFinished)
print "No hay mensajes para leer."
self.cerrarSesion()