de Diego Sarmentero, 3 años han pasado desde su publicación, escrito en Python.
Insertar vínculo
  1. import sys, re
  2. from PyQt4 import QtGui, QtCore, QtWebKit
  3.  
  4. class PyBrowser(QtGui.QWidget):
  5.  
  6.     def __init__(self):
  7.         QtGui.QWidget.__init__(self)
  8.         self.setWindowTitle('Simple Web Browser')
  9.        
  10.         v_box = QtGui.QVBoxLayout(self)
  11.         #Navigation Bar
  12.         h_bar = QtGui.QHBoxLayout()
  13.         self.previous = QtGui.QPushButton(self.style().standardIcon(QtGui.QStyle.SP_ArrowLeft), '')
  14.         self.next = QtGui.QPushButton(self.style().standardIcon(QtGui.QStyle.SP_ArrowRight), '')
  15.         self.refresh = QtGui.QPushButton(self.style().standardIcon(QtGui.QStyle.SP_BrowserReload), '')
  16.         self.stop = QtGui.QPushButton(self.style().standardIcon(QtGui.QStyle.SP_BrowserStop), '')
  17.         self.url = QtGui.QLineEdit('')
  18.         self.url.setFixedWidth(550)
  19.         self.okUrl = QtGui.QPushButton(self.style().standardIcon(QtGui.QStyle.SP_DialogOkButton), '')
  20.         self.okUrl.setFlat(True)
  21.         h_bar.addWidget(self.previous)
  22.         h_bar.addWidget(self.next)
  23.         h_bar.addWidget(self.refresh)
  24.         h_bar.addWidget(self.stop)
  25.         h_bar.addWidget(self.url)
  26.         h_bar.addWidget(self.okUrl)
  27.         #Page Frame
  28.         self.web = QtWebKit.QWebView()
  29.         self.web.load(QtCore.QUrl('http://www.google.com'))
  30.         #Status Bar
  31.         self.status = QtGui.QStatusBar()
  32.         self.prog = QtGui.QProgressBar()
  33.         self.load = QtGui.QLabel('Loading...')
  34.         self.status.addWidget(self.load)
  35.         self.status.addWidget(self.prog)
  36.  
  37.         #Add widgets and layout to window
  38.         v_box.addLayout(h_bar)
  39.         v_box.addWidget(self.web)
  40.         v_box.addWidget(self.status)
  41.         #Shortcut
  42.         self.short = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_J), self.url)
  43.  
  44.         self.connect(self.previous, QtCore.SIGNAL("clicked()"), self.web.back)
  45.         self.connect(self.next, QtCore.SIGNAL("clicked()"), self.web.forward)
  46.         self.connect(self.refresh, QtCore.SIGNAL("clicked()"), self.web.reload)
  47.         self.connect(self.stop, QtCore.SIGNAL("clicked()"), self.web.stop)
  48.         self.connect(self.url, QtCore.SIGNAL("returnPressed()"), self.doSearch)
  49.         self.connect(self.okUrl, QtCore.SIGNAL("clicked()"), self.doSearch)
  50.         self.connect(self.web, QtCore.SIGNAL("loadProgress(int)"), self.progress)
  51.         self.connect(self.web, QtCore.SIGNAL("loadFinished(bool)"), self.loadComplete)
  52.         self.connect(self.web, QtCore.SIGNAL("loadStarted()"), self.status.show)
  53.         self.connect(self.short, QtCore.SIGNAL("activated()"), self.url.setFocus)
  54.  
  55.     def progress(self, porc):
  56.         self.prog.setValue(porc)
  57.  
  58.     def openUrl(self, text):
  59.         self.web.setFocus()
  60.         self.web.load(QtCore.QUrl(text))
  61.  
  62.     def doSearch(self):
  63.         link = self.url.text()
  64.         pat = re.compile('(.+)\\.(.+)')
  65.         patHttp = re.compile('^http://')
  66.         if pat.match(link) and not patHttp.match(link):
  67.             link = 'http://' + link
  68.         elif not pat.match(link):
  69.             link = 'http://www.google.com/search?q=' + link.replace(' ', '+')
  70.         self.openUrl(link)
  71.  
  72.     def loadComplete(self):
  73.         self.url.setText(self.web.url().toString())
  74.         self.status.hide()
  75.  
  76.  
  77. app = QtGui.QApplication(sys.argv)
  78. pybrowser = PyBrowser()
  79. pybrowser.show()
  80.  
  81. sys.exit(app.exec_())