QTimer
is in fact non-blocking which means your timers have been overlapping. Serializing your timer calls should fix this problem.
Try this ...
import sys
from PyQt4 import QtCore, QtGui, QtWebKit
class Browser(QtGui.QMainWindow):
def __init__(self):
"""
Initialize the browser GUI and connect the events
"""
QtGui.QMainWindow.__init__(self)
self.resize(800,600)
self.centralwidget = QtGui.QWidget(self)
self.mainLayout = QtGui.QHBoxLayout(self.centralwidget)
self.mainLayout.setSpacing(0)
self.mainLayout.setMargin(1)
self.frame = QtGui.QFrame(self.centralwidget)
self.gridLayout = QtGui.QVBoxLayout(self.frame)
self.gridLayout.setMargin(0)
self.gridLayout.setSpacing(0)
self.horizontalLayout = QtGui.QHBoxLayout()
self.tb_url = QtGui.QLineEdit(self.frame)
self.bt_back = QtGui.QPushButton(self.frame)
self.bt_ahead = QtGui.QPushButton(self.frame)
self.bt_back.setIcon(QtGui.QIcon().fromTheme("go-previous"))
self.bt_ahead.setIcon(QtGui.QIcon().fromTheme("go-next"))
self.horizontalLayout.addWidget(self.bt_back)
self.horizontalLayout.addWidget(self.bt_ahead)
self.horizontalLayout.addWidget(self.tb_url)
self.gridLayout.addLayout(self.horizontalLayout)
self.html = QtWebKit.QWebView()
self.gridLayout.addWidget(self.html)
self.mainLayout.addWidget(self.frame)
self.setCentralWidget(self.centralwidget)
self.connect(self.tb_url, QtCore.SIGNAL("returnPressed()"), self.sparsh)
self.connect(self.bt_back, QtCore.SIGNAL("clicked()"), self.html.back)
self.connect(self.bt_ahead, QtCore.SIGNAL("clicked()"), self.html.forward)
self.default_url = "http://codescience.wordpress.com/"
self.tb_url.setText(self.default_url)
self.browse()
def browse(self):
"""
Make a web browse on a specific url and show the page on the
Webview widget.
"""
url = self.tb_url.text() if self.tb_url.text() else self.default_url
self.html.load(QtCore.QUrl(url))
self.html.show()
def sparsh_timer_callback (self):
if self.sparsh_index >= len(self.sparsh_urls):
return
url = self.sparsh_urls[self.sparsh_index]
self.html.load(QtCore.QUrl(url))
self.sparsh_index += 1
QtCore.QTimer.singleShot(self.sparsh_interval, self.sparsh_timer_callback)
def sparsh(self):
self.sparsh_urls=["http://thapar.edu","http://yahoo.com","http://google.com"]
self.sparsh_index = 0
self.sparsh_interval = 30000 # 30 seconds
self.sparsh_timer_callback()
self.html.show()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main = Browser()
main.show()
sys.exit(app.exec_())
Hope this helps