Donnerstag, 8. Oktober 2009

Webbrowser in PyQt

Wie viele Zeilen Code benötigt man für einen Webbrowser? Firefox besteht aus mindestens 2 Millionen Zeilen Code, beim Internet Explorer muss man schätzen, aber viel weniger dürftens wohl nicht sein. Da ich schon immer mal die Webkit-Komponente von PyQt ausprobieren wollte, habe ich einfach mal einen einfachen Browser gebaut, und siehe da: weniger als 40 Zeilen Code. :-) Zugegeben: der Vergleich hinkt, weil Qt samt Webkit bestimmt aus mehr als 200.000 Zeilen besteht. Aber man sieht, wie schön sich in PyQT Prototypen bauen lassen.

Hier das Hauptprogramm des Browsers:

#!/usr/bin/env python

import sys, os
import re
from PyQt4 import QtCore, QtGui
from Ui_MainWindow import Ui_MainWindow

def main():
app = QtGui.QApplication(sys.argv)
QtGui.QApplication.setApplicationName("PyQtBrowser")
MainWindow = BrowserWindow()
MainWindow.show()
sys.exit(app.exec_())

class BrowserWindow(QtGui.QMainWindow):
"""The main window of the PyQtBrowser application."""

def __init__(self, *args):
QtGui.QMainWindow.__init__(self, *args)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setWindowTitle("PyQtBrowser")
self.initSignals()

def initSignals(self):
QtCore.QObject.connect(self.ui.lineeditAddress, QtCore.SIGNAL("returnPressed()"), self.loadPage)
QtCore.QObject.connect(self.ui.webviewMain, QtCore.SIGNAL("urlChanged(const QUrl&)"), self.updateUrl)
QtCore.QObject.connect(self.ui.commandBack, QtCore.SIGNAL("clicked()"), self.ui.webviewMain.back)
QtCore.QObject.connect(self.ui.commandForward, QtCore.SIGNAL("clicked()"), self.ui.webviewMain.forward)
QtCore.QObject.connect(self.ui.commandReload, QtCore.SIGNAL("clicked()"), self.ui.webviewMain.reload)

def updateUrl(self, url):
self.ui.lineeditAddress.setText(url.toString())

def loadPage(self):
stringUrl = unicode(self.ui.lineeditAddress.text())
if not re.search(r"^http", stringUrl):
stringUrl = "http://" +stringUrl
url = QtCore.QUrl(stringUrl)
self.ui.webviewMain.load(url)
self.ui.lineeditAddress.clearFocus()

main()

Zu diesem Programm gehört natürlich noch die GUI des Hauptfensters, die noch einmal einige Zeilen Code hinzufügt. Da die GUI in Qt aber mit dem Designer zusammengeklickt wird, handelt es sich streng genommen nicht um "programmierten Code": wir bleiben bei <40Zeilen...

Hier das Archiv mit allen nötigen Dateien: PyQtBrowser.zip

Zum Starten einfach die ZIP-Datei auspacken und den Browser per "python PyQtBrowser.py" starten. Läuft übrigens auch auf Maemo.

Keine Kommentare:

Kommentar veröffentlichen