Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 06-Jul-2013
< Voriger Tag   Nächster Tag >

Samstag, 06. Juli 2013

SWB: Ein einfacher Webbrowser mit Python 3 und pygame

Ein einfacher Webbrowser mit Python 3 und pygame.

Ist nicht mein erster Versuch einen Webbrowser zu schreiben und auch nicht mein letzter. In diesem Fall mit pygame und der Konzentration auf dem Renderer. HTTP sowie das Parsen von HTML und CSS erfolgt mit Python-Modulen von Dritten.

Ende November 2012 hatte ich dazu das Rendern von Floats und HTML-Tabellen bereits ausprobiert. Die ersten Schritte bestehen nun darin, die vor einem halben Jahr geschriebenen Quelltexte aufbereitet zu veröffentlichen.

HTTP-Request - HTML-Quelltext mit print ausgeben

show_html.py benutzt Requests zum Senden eines GET-Requests und Ausgabe des HTML-Quelltext plus den HTTP-Response-Headern wenn --show-response-headers angegeben ist.

Mit --html-lines 7 wird die Anzahl der ausgegebenen HTML-Zeilen begrenzt.

Download: Revision 102
svn checkout --revision 102 https://svn.sven-drieling.de/repos/trunk/playground/webbrowser/ yd-playground-webbrowser-102

HTML-Quelltext mit pygame ausgeben

swb_02_pygame_show_html_sourcecode zeigt den HTML-Quelltext im pygame-Window an.

Der Text wird immer komplett, Zeile für Zeile, mit Hilfe von pygame.font.render(line, g.fg, g.bg) ausgegeben. Negative Positionsangaben im nachfolgenden pygame.surface.blit(text_surface, (left, top)) sorgen für das Scrolling. Das Clipping wird pygame überlassen. Weil immer alle Zeilen und nicht nur die sichtbaren ausgegeben werden, ist bei längeren Texten die Ausgabe entsprechend langsam.

 
def draw(self, g):
    g.surface.fill((255, 255, 255))

    left = self.left - self.scroll_left
    top  = self.top  - self.scroll_top
    for line in self.text.splitlines():
        # Using render() and blit() because render_to() renders sometimes
        # trash on screen
        (text_surface, text_size) = g.font.render(line, g.fg, g.bg)
        g.surface.blit(text_surface, (left, top))
        top = top + text_size.height + self.LINE_GAP

Mit den Cursor-, PageUp/Down- und Home/End-Tasten kann der Quelltext gescrollt werden. Dazu wird zuvor die Höhe und Breite des gesamten Textes berechnet.

 
def layout(self, g):
    self.text_width  = 0
    self.text_height = 0

    for line in self.text.splitlines():
        # Using font.render because freetype.Font.render() and
        # freetype.Font.get_rect returns different sizes
        (text_surface, text_size) = g.font.render(line, g.fg, g.bg)
        self.text_height += text_size.height + self.LINE_GAP
        self.text_width = max(text_size.width, self.text_width)

    # remove last LINE_GAP
    self.text_height -= self.LINE_GAP

    # scrolling
    self.page_right  = self.text_width  - self.width
    self.page_bottom = self.text_height - self.height
    self.scroll(0, 0)
Schrift-Download

./tools/setup.sh/ dient zum Download der DejaVu-Schriften. Entpackt werden sie nach ./fonts/dejavu-fonts/.

Download: Revision 111
svn checkout --revision 111 https://svn.sven-drieling.de/repos/trunk/playground/webbrowser/ yd-playground-webbrowser-111

[Direktlink]

< Voriger Tag   Nächster Tag >

  RSS V0.91

<Juli 2013 >
01020304050607
08091011121314
15161718192021
22232425262728
293031    

Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 06-Jul-2013
(C) 2000-2018 by Sven Drieling